Windows *** 作系统有一个默认调试器设置,使程序出现崩溃时,自动调用这个调试器进行调试。这个设置在windows的注册表中。
对于32位 *** 作系统:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AeDebug/Debugger。
对于64位 *** 作系统:HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Windows NT/CurrentVersion/AeDebug/Debugger。
在这个注册表键中,有两个重要的值:
1、Auto值 : 0表示出现崩溃d出对话框,让用户选择调试器 1表示自动d出默认的调试器。
2、Debugger值,对于windows自带的Dr.Watson该值为“ DRWTSN32 -p %ld -e %ld -g”,对于 WinDBG该值为“WinDbg的安装目录\windbg.exe" -p %ld -e %ld -g”对于Visual Studio该值为"C:\WINDOWS\system32\vsjitdebugger.exe" -p %ld -e %ld"
最近一段时间十分郁闷,公司一个新上线的项目马上要上线了,有个核心的程序在内部测试过程中没有问题,但在实际运行过程中,不知是何原因却老是出现问题,而错误信息的扑捉一直不好处理,因为问题的出现没有规律性,且每次发生的间隔多为运行1-3天时会出现,如果用DELPHI调试,一是等待周期太长,二来程序中有一些通过try方法屏蔽的部分错误 信息会不断在delphi内触发报错,由于程序是需要不断实时运行的程序,不断d出的对话框严重影响程序的运行。所以,当时只好通过记录日志方法查找问题。事实证明这个方法并不是一个理想的好方法,因为往往记录了一大堆的日志,也不知道问题出在哪里,十分头疼。这种情况维持了很长一段时间,问题依然无法定位解决,如果能够根据报错信息直接定位到具体的delphi的源代码行就好了,说干就干,经过一晚上的努力,终于找到了一个比较简单,当然是十分适合delphi的方法。
下面将这个方法介绍给大家,以delphi7为对象:
1、先对需要分析的程序源代码重新编译,编译的同时需要获得对应的MAP文件,下面是具体的 *** 作步骤:
2) 重新编译程序,在设定生成最终执行文件的目录下你可以发现一个与执行文件同名,后缀为map的文件,这个就是我们要的map文件了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)