win7+vs2010通过map文件和cod文件找到崩溃的代码行
来源:互联网 发布:长门有希的消失 知乎 编辑:程序博客网 时间:2024/06/05 21:19
用来演示出错的源代码:
#include "stdio.h"
void errorFun(int * p)
{
*p=1;
}
int main()
{
int * p=NULL;
errorFun(p);
return 0;
}
工程选项设置:
编译运行后报错,点击“查看问题详细信息”,看到异常偏移:000113a1
再打开目录下的.map文件,看到一行 Preferred load address is 00400000,表示起始地址是00400000,根据崩溃地址=起始地址+偏移地址,即崩溃地址=00400000+000113a1=004113a1,通过这个地址找到第一个比这个地址大的一行的前一行,也就是00411380 ,这个代表出错函数的起始地址,同时可以看到出错函数是errorFun函数。
已经定位到出错函数了,下一步精确定位到出错代码行,打开.cod文件,通过搜索"errorFun"找到:
?errorFun@@YAXPAH@Z PROC; errorFun, COMDAT
; 4 : {
00000 55 push ebp
00001 8b ec mov ebp, esp
00003 81 ec c0 00 00
00 sub esp, 192; 000000c0H
00009 53 push ebx
0000a 56 push esi
0000b 57 push edi
0000c 8d bd 40 ff ff
ff lea edi, DWORD PTR [ebp-192]
00012 b9 30 00 00 00 mov ecx, 48; 00000030H
00017 b8 cc cc cc cc mov eax, -858993460; ccccccccH
0001c f3 ab rep stosd
; 5 : *p=1;
0001e 8b 45 08 mov eax, DWORD PTR _p$[ebp]
00021c7 00 01 00 00
00 mov DWORD PTR [eax], 1
; 6 : }
; 4
00 sub esp, 192; 000000c0H
ff lea edi, DWORD PTR [ebp-192]
; 5
00 mov DWORD PTR [eax], 1
; 6
这里的4,5,6代表源代码的行,比如4在源代码中对应"{"
然后根据:崩溃地址-函数起始地址= 004113a1 -00411380=0x21,在code文件中找到 00021,向前看看到“; 5 : *p=1; ”,即出错代码行数是第5行,代码是*p=1,至此已经成功找到出错的代码。
阅读全文
0 0
- win7+vs2010通过map文件和cod文件找到崩溃的代码行
- win7+vs2010通过map文件和cod文件找到崩溃的代码行
- win7+vs2010通过map文件和cod文件找到崩溃的代码行
- vs2010利用map,cod文件定位崩溃代码行
- vs2010利用map,cod文件定位崩溃代码行
- 利用map和cod文件查出崩溃代码行
- 利用map和cod文件查出崩溃代码行
- 如何通过map文件轻松找到崩溃的代码行
- 如何通过map文件轻松找到崩溃的代码行
- VS中通过map文件找到崩溃的代码行
- wince 应用程序崩溃原因分析data abort----通过产生MAP和COD文件的方式
- QCreator + VS2010 生成MAP文件和COD文件
- 利用map和cod文件定位崩溃位置的例子和习题
- 利用map文件找到程序崩溃代码行
- release下无法及时定位崩溃 导出dump文件 cod文件 map文件
- VC6和VC8(VS2005)生成map和cod文件
- 如何使用MAP文件找到程序崩溃的原因
- 如何使用MAP文件找到程序崩溃的原因
- 史上最全编程语言列表_你掌握了哪些?
- 浅谈性能优化
- 2017-6-13(NBA季后赛总冠军)
- dwr框架带参数,而且有返回值的方法调用
- 占位
- win7+vs2010通过map文件和cod文件找到崩溃的代码行
- 设计模式(八)原型模式
- 史上最全的maven的pom.xml文件详解
- 关于Android Studio 的Gradle 的问题
- Java多线程学习
- 使用jquery获取网页中图片高度的两种方法
- Android程序结构
- SE16N 修改表
- 保存图片到相册