delphi,根据access violation的出错信息查找源代码出错位置

来源:互联网 发布:犀牛软件雕花教程 编辑:程序博客网 时间:2024/06/05 14:59

首先,编译的时候,project -> options -> Linker -> Map file 选择detailed.

出错时会弹出access violation错误,里面有个地址,类似:Access violationat address 0044D967 in module....

计算公式:

崩溃行偏移 = 崩溃地址(Crash Address) - 基地址(ImageBase Address) - 0x1000 
0044d967 - 00400000 = 0004d967 - 00001000 = 0004c967 

记住这个数字:4c967

我们用ultraedit32/editplus之类的工具打开 .map文件,然后找到

Line numbers for Unit1(Unit1.pas) segment .text

这样的文字,里面可能是这样的:

 28 0001:0004C944    29 0001:0004C957    30 0001:0004C95F    32 0001:0004C987
 34 0001:0004C9BC    34 0001:0004C9C3

第30行编译生成的内存地址是4c95f开始的,出错的代码位于这行区间,也就是30行。