通过崩溃地址查找出源码中出错的行数

本文介绍了一种通过计算崩溃地址偏移并结合MAP文件来定位程序崩溃具体行数的方法。首先,需设置编译器生成详细MAP文件;其次,利用特定公式计算崩溃行偏移,进而确定错误行数。

第一:先要让编译器生成MAP文件,方法:

project -> options -> Linker -> Map file 选择detailed。

第二:计算公式:

崩溃行偏移 = 崩溃地址(Crash Address) - 基地址(ImageBase Address) - 0x1000 

以上公式的“基地址”可以在project -> options -> Linker中的memory size框中的IMAGE BASE中看到,我的是“00400000”。

然后编译,运行自己的程序,出现如图的崩溃时:

 

 

用公式可得出:0044E1CD -00400000-00001000=0004D1CD,这里的0004D1CD可能就是指向源代码中出错的行数。然后我们用UltraEdit等工具打开工程所在文件夹里的“Project1.map”文件(是不是叫project1.map,就看你的工程叫什么名字了),在里面查找比0004D1CD小,但最接近0004D1CD的一个字符串,找到的字符串所指向的数字就是出错的行数,如下图中,比0004D1CD小,但最接近0004D1CD的是0004D1CA,它是31,说明就是第31行出错:

 

下图是我源代码的载图,第30行把指针指向nil,第31行又向指针指向的地方写数据,程序当然崩溃,所以前面找到的第31行出错是正确的:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值