插件程序崩溃的定位有关问题

插件程序崩溃的定位问题
程序采用插件框架,有很多功能插件,插件的形式为DLL,由其他人进行开发,并加到程序框架中,在程序运行过程中,如何能够快速定位程序的错误是由哪个插件引起的?如果采用日志,需要每个插件内部做工作,有没有其他的方式?

------解决方案--------------------
网上有一个叫msjexhnd.h和msjexhnd.cpp的文件,加入你的工程一起编译,程序出错时会自动记录当时的堆栈信息,从日志文件中基本能看出是哪个模块出问题,但要精确定位比较难。
------解决方案--------------------
如果你的框架和别人提供的dll没有做FPO优化,在没有dll调试信息的情况下能根据函数栈定位到是哪个dll出现的异常.如果dll有FPO优化并且没有调试信息,那函数栈就很可能不正确,也无法定位到具体是哪个dll出现的异常.可以让开发dll的人员提供对应dll的pdb文件,即使是release版本也可以配置生成pdb文件.在框架中调用SetUnhandledExceptionFilter来设置默认的异常处理函数,在里面有足够的信息,用MiniDumpWriteDump来生成dump文件,用vs就可以设置好符号文件目录,然后调试这个dump文件.
------解决方案--------------------
条件是DLL没有打点输出崩溃日志。

外部调用者打点的话,自己封装个调用DLL的函数(入参需要函数指针),在函数中输出DLL信息。

类似:XXX DLL begin!调用完返回正确值! XXX DLL end!找到不匹配的就有问题。

------解决方案--------------------
一般Crash,异常,在event log中都有描述出对应的DLL名称等信息
------解决方案--------------------
引用:
Quote: 引用:

网上有一个叫msjexhnd.h和msjexhnd.cpp的文件,加入你的工程一起编译,程序出错时会自动记录当时的堆栈信息,从日志文件中基本能看出是哪个模块出问题,但要精确定位比较难。


这个是放在主程序中,还是每个插件工程中都要一同编译一份?


放主程序中就可以了