首先,编译的时候,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行。