首页
社区
课程
招聘
程序运行突然弹异常的快速解决办法
发表于: 2013-5-16 14:45 5018

程序运行突然弹异常的快速解决办法

2013-5-16 14:45
5018
本方法适合汇编不熟悉,OD很少用的写3环应用软件的程序员,高手飘过。

昨天一朋友问我“程序异常了,怎么能快速锁定到哪行代码?”于是,写了个方法给他。
程序运行一段时间之后,莫名其妙突然弹一个对话框提示:XXXXXX内存地址无法访问,或者是异常。点 “确定”关闭。如图:

尤其是产品发布之后,出现了这样的问题,不懂OD的人,会很纠结,需要一行一行的仔细检查自己的Code。
异常了,怎么办?怎么快速解决?怎么快速找到根源?
一个快捷的方法,几分钟之内找到引发这个问题的代码。
• 第一步:
OD附加
    + 下断点:
bp MessageBoxA
bp MessageBoxW
bp MessageBoxExA
bp MessageBoxExW

第二步,OD断在

第三步,F8单步到下面位置:就是Messagebox运行的上层Call。


Ctrl+C复制出,右下角那行:001264E0   00413080  mfcDebug.00413080
记住这个数字“ 00413080  ”然后,关闭OD。

不管什么异常,这个返回地址在堆栈中的位置是固定的。

第四部:
用VC打开自己的工程,在WinMain下断点,或者其他可以启动就断下来的地方也可。
断下来之后,打开反汇编窗口,输入地址 0x413080



最后一步:
右键“转到源代码”


这样就找到了Code哪里出了问题。

OK

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 4984
活跃值: (3371)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
vs 可以直接附加,然后点中断,就会自动断在出问题的代码上,然后在堆栈里找找,很快就可以找到了,不用搂着这么麻烦的
2013-5-16 14:51
0
雪    币: 112
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
很感谢楼住的方法,表示思想上支持!
2013-5-16 20:18
0
雪    币: 538
活跃值: (274)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
楼主这种办法对于OD不熟悉的人来说依然很难呀...
这里推荐一种方便简单的方法,直接在你的程序里面加上一个错误报告程序,在你程序崩溃的时候自动生成dump文件,然后直接用VS或者WINDBG就可以看到代码出错位置,
当然 前提是编译的时候生成pdb文件(好像VC6以上都是默认生成的)

至于错误报告程序网上有非常多的开源项目比如下面这个
https://code.google.com/p/crashrpt/
2013-5-16 21:06
0
雪    币: 18
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
看了这个,我推荐一下自己的博客,专门解决这一类的问题.windows,linux都有.
blog.csdn.net/xuzhina
2013-5-16 23:06
0
雪    币: 1839
活跃值: (295)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
6
长见识了,哈哈。感谢楼上几位。

我只能说我很土。
2013-5-17 09:13
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主这个确实是实用价值有限。。。

在多线程程序中。 经常报错的地方并不是出问题的地方。 所以还是检查code吧。。。
2013-5-17 09:46
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
我喜欢直接放个DBGHELP.DLL
2013-5-24 00:29
0
游客
登录 | 注册 方可回帖
返回
//