利用map,cod文件定位崩溃代码行
利用vs2010 新建一个空的控制台项目,添加文件gtg.cpp,内容如下
void crash()
{
inti=1;
intj=0;
i/=j;
}
int main()
{
crash();
return0;
}
配置生成map及cod文件
项目-》属性-》连接器-》调试-》生成映射文件-》是 (/MAP)
项目-》属性-》c/c++-》输出文件-》汇编程序输出-》程序集、机器码和源代码 (/FAcs)
然后将增量编译关闭,否则会连接错误;
编译生成项目,运行,出现如下异常窗口

其中的故障模块名称及异常偏移是关键信息,
从异常模块名称 ddd.exe 我们知道问题代码应在ddd.map中
ddd
Timestamp is 5145d550 (Sun Mar 17 22:38:082013)
Preferred load address is 00400000
Start Length Name Class
0001:00000000 00001b3cH .text CODE
0002:00000000 000000e0H .idata$5 DATA
0002:000000e0 00000004H .CRT$XCA DATA
0002:000000e4 00000004H .CRT$XCAA DATA
0002:000000e8 00000004H .CRT$XCZ DATA
0002:000000ec 00000004H .CRT$XIA DATA
0002:000000f0 00000004H .CRT$XIAA DATA
0002:000000f4 00000004H .CRT$XIY DATA
0002:000000f8 00000004H .CRT$XIZ DATA
0002:00000100 000009d0H .rdata DATA
0002:00000ad0 00000036H .rdata$debug DATA
0002:00000b10 00000004H .rdata$sxdata DATA
0002:00000b14 00000004H .rtc$IAA DATA
0002:00000b18 00000004H .rtc$IMZ DATA
0002:00000b1c 00000004H .rtc$IZZ DATA
0002:00000b20 00000004H .rtc$TAA DATA
0002:00000b24 00000004H .rtc$TMZ DATA
0002:00000b28 00000004H .rtc$TZZ DATA
0002:00000b30 0000009

本文介绍了如何利用Visual Studio 2010生成的map和cod文件来定位程序崩溃的具体代码行。通过设置项目属性生成映射文件和汇编程序输出,当程序崩溃时,根据异常模块名称和异常偏移,可以在map文件中找到异常代码所在函数,再结合cod文件确定具体行数,从而快速定位问题。
最低0.47元/天 解锁文章
6422

被折叠的 条评论
为什么被折叠?



