定位程序崩溃点儿

定位程序崩溃点儿

ID:20603312

大小:59.17 KB

页数:7页

时间:2018-10-14

定位程序崩溃点儿_第1页
定位程序崩溃点儿_第2页
定位程序崩溃点儿_第3页
定位程序崩溃点儿_第4页
定位程序崩溃点儿_第5页
资源描述:

《定位程序崩溃点儿》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、定位程序崩溃点儿作为程序员,平时最担心见到的事情就是程序发生了崩溃,无论是指针越界还是非法操作,都将给我们的应用系统造成巨大的损失。但在一个大型系统的测试过程屮,初期出现程序崩溃似乎成了不可避免的事。其实测试中出现程序崩溃并不可怕,反而是测试的成功。我们更为关心的是程序中的哪一行导致了系统崩溃,这样我们才能有针对性的进行改正。在VC中,我们可以利用出现程序崩溃时VC的自动跳转,定位到出错代码行。但在大量的压力测试时,尤其是多线程测试时,同时出现几十个错,这时VC本身的出错跳转往往会失灵。在这里我们介绍一

2、种辅助查找程序崩溃代码行的好方法,它的核心就是利用编译时生成MAP文件中的信息来定位代码行。下面就开始我们的介绍。首先我们必须生成程序的MAP文件。那么什么是MAP文件呢?简单地讲,MAP文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,是整个程序工程信息的静态文本。它可以在任何地方、任何时候使用,不需要有额外的程序进行支持,仅仅通过一个文木阅读工具如UltraEdit就可以打开了。而且,这是唯一能找出程序崩溃代码行的救星。那么我们应该如何生成MAP文件呢?在VC中,我们可以按下AIHF7

3、,打开“ProjectSettings”选项页,选择C/C++选项卡,并在最下面的ProjectOptions里面输入:/Zd,然后要选择Link选项卡,选中“Generatemapfile”复选框,并在最下面的ProjectOptions里面输入:/mapinfodines,表示生成MAP文件时,加入行信息。最后按下F7来编译生成EXE可执行文件和MAP文件,此时可以在工程的Debug冃录下找到刚刚生成的MAP文件,文件名为“工程名.map”。通过上面的步骤,己经得到了MAP文件,那么我们该如何利用它

4、呢?让我们从一个简单的实例入手,一步一步演示使用MAP文件定位程序崩溃行的过程。首先假设我们的VC工程中有下面这个文件:////柱序名称:演示如何通过崩溃地址找出源代码的出错行//作者:刘可//日期:2003-6-19//本程序会产生“除0错误”,所以会导致//程序崩溃,弹出“非法操作”对话框。,,木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木,//卄1ncludeintcrashtest(intajntb){intc;c=a/b;returnc;}voidmain(v

5、oid){inta=30;intb=0;intret;printf(nlet'sbegincrashtest?");ret=crashtest(a,b);}很显然本程序有“除0错误”,在Debug方式下编译,运行时会产生“非法操作”。我们记录下产生崩溃的地址一一在我的机器上是0x0040102f。这个在不同的机器上可能地址不同,但记下这个地址我们下面将要使用。我们打幵它的MAP文件:(这里列出我们比较关心的内容,其他的就略过了)abort(工程名)Timestampis3efl6533(ThuJun

6、1915:24:352003)Preferredloadaddressis00400000StartLengthNameClass0001:000000000001081dH.textCODE0002:00000000000013baH.「dataDATA0002:000013ba0003:000000000003:000001040003:000002080003:0000030c0003:000004180003:0000051c0003:000006200003:000007240003:0000

7、08280003:0000092c0003:00000a300003:00003c680004:000000000004:000000140004:000000280004:0000014800000000H.edata00000104H.CRT$XCA00000104H.CRT$XIZ00000104H.CRT$XPZ00003236H.data00000014H.idata$300000104H.CRT$XPA00000104H.CRT$XTA000019c8H.bss00000120H.idata

8、$00000104H.CRT$XPX00000104H.CRT$XTZ00000014H.idata$200000120H.idata$5DATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATA0004:00000268000004f4H.idata$6DATAAddressPublicsbyValueRva+BaseLib:Object0001:0000002

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。