读书人

如何根据崩溃信息定位源码中的异常

发布时间: 2013-04-02 12:35:26 作者: rapoo

怎么根据崩溃信息,定位源码中的错误?
怎么根据崩溃信息,定位源码中的错误?

程序在自己的机器上运行没有问题,但是在别人的机器上运行的时候崩溃了。不能把源码传给别人,也不能给别人机器装VS调试,只有崩溃是的错误信息。
win7下的错误信息:故障模块名称:terminate.exe
故障模块版本:0.0.0.0
故障模块时间戳:512cc003
异常代码:c0000094
异常偏移:000017c4
OS 版本:6.1.7601.2.1.0.256.1
区域设置 ID:2052
其他信息 1:0a9e
其他信息 2:0a9e372d3b4ad19135b953a78882e789
其他信息 3:0a9e
其他信息 4:0a9e372d3b4ad19135b953a78882e789
xp上的则是0x000xxxx处的内存错误

像这种情况,怎么根据这些错误信息定位源码中是哪里的问题呢?
[解决办法]
异常偏移: 000017c4
已经很清楚了。
在你本机重新编译生成.map文件,参考其内容即可定位000017c4位于源代码对应哪一行了。
或者用w32dsm软件反汇编exe,看000017c4处对应的汇编指令对应源代码哪一行
[解决办法]
用map文件,根据崩溃的地址码,在map文件中通过偏移量就可以找到所在的代码行了。
[解决办法]
别听上面的老师乱说- -
笑死了!

给自己的源码添加异常处理类,异常时生成dump文件,
然后调用windbg定位(包含pdb文件),注意有可能出现异常的库也要带异常类,

可以定义到某某行出现异常的,但是版本要一致
[解决办法]

引用:
win7下的错误报告和xp不太一样。
参考这个:http://www.nirsoft.net/utils/app_crash_view.html

Win7的话,请楼主重点关注此帖

读书人网 >C++

热点推荐