【教程第一课---调试方法】
作者:bo
今天教大家点有用的东西,快速解决程序运行中突然异常的问题。
关于 vc,mfc,delphi,java,bcb,数据库等等的开发工具的使用,就不教了,因为这些
东西 baidu 上有大量的视频教程。
我们开发项目最花时间的是调试,起码占了整个开发时间的一半以上,甚至更多。
调试类型:
a,Code 写错。
b,逻辑错误。
c,内存益处。
d,对象为空。
{-- 以上问题都比较容易找到问题所在--}
e,程序员通常都会遇到:
程序运行一段时间之后,莫名其妙突然弹一个对话框提示:XXXXXX 内存地址无法访问。
点 “确定”关闭。尤其是产品发布之后,出现了这样的问题,可能是用户太多,可能是网
络不给力,可能是。。。。。。。
异常了,怎么办?怎么快速解决?怎么快速找到根源?
今天就告诉大家一个快捷的方法,保证 5 分钟之内找到引发这个问题的代码。
作为程序员第一感觉是内存的问题,但是到底是哪里的问题呢?如何找出来呢?
通常就需要把自己的代码一行一行的检查,很花时间,
如果项目已经写的很庞大,有时候几天都未必可以找到真正的问题所在。
因为这个问题只有特殊的大数据流的压力情况下或许出现,用 vc 调试模式运行又很难重现。
下面说一种方法,可以几分钟解决这种类型的异常。
· 第一步:
在出现这个问题之后,告诉用户不要点确定,因为点了确定,就关闭了,下次重现这个问题
不知道在猴年马月了。
OD 附加
+ 断点:
77D18731
. FF55 08
call
dword ptr [ebp+8]
; 【重要】User32
提交消息到进程处理
//关键字: 68CDABBADC56FF7518FF7514FF7510
bp _CrtDbgReport
bp MessageBoxA
bp MessageBoxW
bp MessageBoxExA
bp MessageBoxExW
bp CreateWindowExA
bp CreateWindowExW
·第二步,OD 断在
·第三步,F8 单步到下面位置:
Ctrl+C 复制出,右下角那行:001264E0
00413080 mfcDebug.00413080
记住这个数字“ 00413080 ”然后,关闭 OD。
你或许要问,右下框里面那么多地址为什么偏偏是这个呢,因为自己的 Code 的地址只能是
0x400000—0xF00000 这个范围。编译器 Dll 的地址都在 0x10000000 以上呢,操作系统
代码地址都在 0x70000000 以上呢。所以只可能是这个。
第四部:
用 VC 打开自己的工程,在 WinMain 下断点,或者其他可以启动就断下来的地方也可。
断下来之后,打开反汇编窗口,输入地址 0x413080
最后一步:
右键“转到源代码”
这样就找到了 Code 哪里出了问题。
OK,讲完。