release版本崩溃,如何定位代码行

一、设置编译产生map文件的方法(利用MAP文件)

在vc6的IDE中有产生map文件的配置选项的。操作如下:先点击菜单"Project"->"Settings。。。",弹出的属性页中选中"Link"页,确保在"category"中选中"General",最后选中"Generate mapfile"的可选项。


二、定位崩溃语句的方法(利用COD文件)

在vc6中我们还可以通过编译程序产生的对应的汇编语句,二进制码,以及对应c/c++语句为一体的"cod" 文件来定位出错语句行。先介绍一下产生这种包含了三种信息的"cod"文件的设置方法:先点击菜单"Project"->"Settings。。。",弹出的属性页中选中"C/C++"页 ,然后在"Category"中选则"Listing Files",再在"Listing file type"的组合框中选择"Assembly,Machine code, and source"


三、定位崩溃函数

在map文件中,假设崩溃地址0x00401082,小于此地址中最接近的地址为0x00401060,则其对应的函数名即为崩溃函数。

崩溃偏移地址 = 崩溃语句地址 - 崩溃函数的起始地址=0x00401082 - 0x00401060 = 0x22


四、定位崩溃行

在COD文件中,加上崩溃函数在cod文件中相对偏移为0x103

崩溃语句在cod文件中的相对偏移 =  崩溃函数在cod文件中相对偏移 + 崩溃偏移地址 = 0x103+0x22 = 0x125

在 崩溃语句在cod文件中的相对偏移(0x125) 前面的第一条c语句即为崩溃语句。

举例:

一、崩溃语句地址:0x00401202



二、利用MAP文件定位函数:(红色标出的部分,第三列代表函数地址,_main函数的地址是最后一个小于崩溃地址的,故而崩溃函数为memleakstest.obj中的_main)

 0001:000001e0       _main                                  004011e0  f       memleakstest.obj

 0001:00000220       ??2@YAPAXI@Z               00401220   f   i   StdAfx.obj

崩溃函数的起始地址:0x004011e0

崩溃偏移地址=  0x00401202 - 0x004011e0 = 0x22



利用COD文件定位代码行:(memleakstest.cod中搜索_main)

_main   PROC NEAR                   ; COMDAT

; 6    : {

  00000 55      push   ebp


崩溃函数在cod文件中相对偏移 = 0x00000

崩溃语句在cod文件中的相对偏移 = 0x00000 + 0x22 = 0x00022

; 9    :    *p = 0x2;

  0001f 8b 45 fc    mov    eax, DWORD PTR _p$[ebp]

  00022 c6 00 02    mov    BYTE PTR [eax], 2



由此推断出:崩溃发生在memleakstest.obj中的_main的第9行(*p = 0x2;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值