您的位置:首页 > 编程语言

VS2012下通过MAP追踪异常代码的位置

2018-03-25 21:37 267 查看
[cpp] view plain copy#include "stdafx.h"  
  
double DivideBy (double dividend, double divisor)  
    {  
    double retVal = dividend / divisor;  
    return retVal;  
    }  
  
int _tmain(int argc, _TCHAR* argv[])  
    {  
    DivideBy (1.0, 0.0);  
  
    return 0;  
    }  

编译时生成MAP文件,以及COD文件:1. Configuration Properties->Linker->Debugging->Generate Map File,设置为Yes (/MAP).2. Configuration Properties->C/C++->Output Files->Assembler Output,设置为Assembly, Machine Code and Source (/FAcs).注:若Configuration Properties->C/C++->Optimization->Optimization需要设置为Disabled (/Od),否则,MAP文件内容可能会被优化而无法定位到出错的函数。
运行exe,肯定会出现异常。


查看详细信息,找到Exception Offset: 00001008,因为exe默认的基地址是400000,所以相加后=401008.

第一步,打开程序的MAP文件,定位出错的函数:


可以看出第一个大于401008的位置是_wmain函数,再往前查看,可以知道出错的函数为DivideBy。第二步,打开相应的COD文件,定位出错的代码行:由上面可以算出一个偏移量=401008-401000=8


所以,代码行就是第5行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: