有时候我们的程序crash了,会出现一个crash界面提示我们在什么位置中断了。我们如何根据这个中断地址找到对应的行号呢?
要想达到这样的目的,首先要进行一些工程属性的配置。
c/c++->常规->调试信息格式->程序数据库
c/c++->优化->优化->禁用
链接器->调试->生成调试信息->是
->生成映射文件->是
->映射文件名称->$(OutDir)/$(ProjectName).map
->映射导出->是
->映射行->是
1 int main
(int argc, char* argv[])
2 {
3
char * p = 0;
4
*p = 'c';
5
return 0;
6 }
当执行程序的时候,显示“test1.exe中的0x0040100e处未处理的异常:0xc000005:写入位置0x00000000时发生访问冲突”
这个时候来看一下map文件。首先看到的是参考的加载地址: Preferred load address is 00400000
Timestamp is 4639462c (Thu May 03 10:17:16 2007)
Preferred load address is
00400000
Start
Length
Name
Class
0001:00000000 00003b58H
.text
CODE
0002:00000000 000000c4H
.idata$5
DATA
0002:000000d0 00000c40H
.rdata
DATA
0002:00000d10 00000048H
.rdata$debug
DATA
0002:00000d60 00000008H
.rdata$sxdata
DATA
0002:00000d68 00000004H
.rtc$IAA
DATA
0002:00000d6c 00000004H
.rtc$IZZ
DATA
0002:00000d70 00000004H
.rtc$TAA
DATA
0002:00000d74 00000004H
.rtc$TZZ
DATA
0002:00000d78 00000014H
.idata$2
DATA
0002:00000d8c 00000014H
.idata$3
DATA
0002:00000da0 000000c4H
.idata$4
DATA
0002:00000e64 00000366H
.idata$6
DATA
0002:000011ca 00000000H
.edata