MAP文件和调试(VC)(从崩溃地址找出错源码位置)
来源:互联网 发布:淘宝客教程 编辑:程序博客网 时间:2024/05/16 12:34
2009-02-19 21:55
也是:一直听说,从未动手。
所以,用VC生成一下MAP文件,帮助调试。
一.步骤:
Project Settings-> C/C++-> Project Options:
这里输入 /Zd,将在编译时生成行信息。
Project Settings->Link-> Project Options:
/mapinfo:lines
/map:MapFileName.map
/mapinfo:exports
MapFileName是生成MAP文件的名字
第一个是生成行信息,第三个是加入导出信息。
这样就设置好了,编译出来的就有MAP文件了.
二.MAP文件:
写一个程序,编译出来:
#include <stdio.h>
int main(){
int i = 2;
int j ;
scanf("%d",&j);
i = 2;
i = 3;
i = 4;
i = 5;
i = 6;
printf("%d",i/j);
return 0 ;
}
然后打开MAP文件.
里面有各种全局符号,大概在文件的中间位置,有这样的东西:
Line numbers for ./Debug/4.obj(E:/pro/4/4.cpp) segment .text
3 0001:00000010 4 0001:00000024 6 0001:0000002b 7 0001:0000003c
8 0001:00000043 9 0001:0000004a 10 0001:00000051 11 0001:00000058
可以直接Ctrl+F找到程序文件名,我这里是4.cpp
这些就是代码偏移和对应的行号.
三.调试
就刚才的程序,运行,输个0,过一下出错框就来了,
我是VISTA,下面的详细信息是:
问题签名:
问题事件名称: APPCRASH
应用程序名: 4.exe
应用程序版本: 0.0.0.0
应用程序时间戳: 499d5ade
故障模块名称: 4.exe
故障模块版本: 0.0.0.0
故障模块时间戳: 499d5ade
异常代码: c0000094
异常偏移量: 00001063
OS 版本: 6.0.6001.2.1.0.768.3
区域设置 ID: 2052
其他信息 1: 38fc
其他信息 2: db4f9c1c160faa4608f429ddffa01d6f
其他信息 3: cb3b
其他信息 4: e8ffb2a21d4a9ed7b258f1866c9d3db8
这个偏移就是要看的了。减去1000的代码段偏移。
就是63,再对照上面的行号和地址的列表
11 0001:00000058
这个是VC翻译的时候,第11行显然会对应多条指令。
这一指令群的开始地址是58.
这个是最接近63且比63小的地址,所以问题应该出在这一行上。
再看代码:
printf("%d",i/j);
发现这里有个除0错误。
OK,记到这里,以后用到了来翻
所以,用VC生成一下MAP文件,帮助调试。
一.步骤:
Project Settings-> C/C++-> Project Options:
这里输入 /Zd,将在编译时生成行信息。
Project Settings->Link-> Project Options:
/mapinfo:lines
/map:MapFileName.map
/mapinfo:exports
MapFileName是生成MAP文件的名字
第一个是生成行信息,第三个是加入导出信息。
这样就设置好了,编译出来的就有MAP文件了.
二.MAP文件:
写一个程序,编译出来:
#include <stdio.h>
int main(){
int i = 2;
int j ;
scanf("%d",&j);
i = 2;
i = 3;
i = 4;
i = 5;
i = 6;
printf("%d",i/j);
return 0 ;
}
然后打开MAP文件.
里面有各种全局符号,大概在文件的中间位置,有这样的东西:
Line numbers for ./Debug/4.obj(E:/pro/4/4.cpp) segment .text
3 0001:00000010 4 0001:00000024 6 0001:0000002b 7 0001:0000003c
8 0001:00000043 9 0001:0000004a 10 0001:00000051 11 0001:00000058
可以直接Ctrl+F找到程序文件名,我这里是4.cpp
这些就是代码偏移和对应的行号.
三.调试
就刚才的程序,运行,输个0,过一下出错框就来了,
我是VISTA,下面的详细信息是:
问题签名:
问题事件名称: APPCRASH
应用程序名: 4.exe
应用程序版本: 0.0.0.0
应用程序时间戳: 499d5ade
故障模块名称: 4.exe
故障模块版本: 0.0.0.0
故障模块时间戳: 499d5ade
异常代码: c0000094
异常偏移量: 00001063
OS 版本: 6.0.6001.2.1.0.768.3
区域设置 ID: 2052
其他信息 1: 38fc
其他信息 2: db4f9c1c160faa4608f429ddffa01d6f
其他信息 3: cb3b
其他信息 4: e8ffb2a21d4a9ed7b258f1866c9d3db8
这个偏移就是要看的了。减去1000的代码段偏移。
就是63,再对照上面的行号和地址的列表
11 0001:00000058
这个是VC翻译的时候,第11行显然会对应多条指令。
这一指令群的开始地址是58.
这个是最接近63且比63小的地址,所以问题应该出在这一行上。
再看代码:
printf("%d",i/j);
发现这里有个除0错误。
OK,记到这里,以后用到了来翻
- MAP文件和调试(VC)(从崩溃地址找出错源码位置)
- MAP文件和调试(VC)(从崩溃地址找出错源码位置)
- vc环境下从异常出错地址找代码行数
- 通过崩溃地址 MAP文件 找错误行数之Delphi版
- 通过符号文件来找崩溃地址
- 利用MAP文件定位程序崩溃位置
- vc调试:使用MAP文件快速定位程序崩溃代码行-zz
- vc调试:使用MAP文件快速定位程序崩溃代码行
- 利用map和cod文件定位崩溃位置的例子和习题
- 程序调试: 通过崩溃地址找到出错的代码行
- VC根据崩溃内存地址,查找异常代码位置
- 通过崩溃地址查找出源码中出错的行数
- 程序在崩溃时记录出错的位置-Dump文件
- 通过崩溃地址使用map文件来定位
- vc使用map文件查找程序崩溃原因
- 转载——利用map文件调试程序崩溃
- 如何定位Release 版本中程序崩溃的位置 ---利用map文件 拦截windows崩溃函数
- 如何定位Release 版本中程序崩溃的位置 ---利用map文件 拦截windows崩溃函数
- 字典树【模板】
- JPA学习笔记-EJB-01JPA初体验
- 白领的一天 场景3:第一次去公司
- hdu 2015 偶数求和
- SQL不同服务器数据库之间的数据操作整理(完整版)
- MAP文件和调试(VC)(从崩溃地址找出错源码位置)
- 将指定文件夹下结构相同的EXCEL文件(支持2003和2007版本)批量导入到SQL数据库中指定的表
- hdu 2016 数据的交换输出
- VC中实现打开文件对话框中文件类型下拉列表
- Human Gene Functions
- sql 数据库对象剖析
- 引用与指针,代码隐藏,构造函数
- 白领的一天 场景4:初次面试
- CArchive的对象使用