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

本文中涉及的编译环境为Visual Studio 2012.


#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行。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值