WinCE中的Data/ Prefetch Abort异常定位

WinCE中的Data/ Prefetch Abort等异常定位

在调试WinCE程序的时候,有时候会碰到Data/Prefetch Abort的异常,相信从事过WinCE开发的人对这种异常信息应该都不会陌生,系统会在调试控制台输出如下类似信息:

Exception 'Prefetch Abort' (3): Thread-Id=05870016(pth=9970c000), Proc-Id=057c0016(pprc=9973cdd4)‘TCPClient.exe’,VM-active=057c0016(pprc=9973cdd4) 'TCPClient.exe'PC=00000004(???+0x00000004) RA=00011254(TCPClient.exe+0x00001254) SP=0011f954, BVA=00000004

如下图:

 

Prefetch Abort和Data Abort的定位方法一样。

其中RA=00011254就表示产生异常的地址,也可以通过TCPClient.exe+0x00001254中的

0x00001254 + 0x00010000 = RA=00011254来计算。为什么是加上0x00010000呢?

打开map文件,找到Preferred load address is 00010000的一段信息,你就明白要加上多少了。

在map文件中找到比0x000011254小且最接近的一个值,本程序中为0x00011108,如下图:

 

就可以判断是该函数中出了问题,要想找到具体出错在那一行,还得利用.cod文件进行定位。

SocketThreadFunc函数的起始地址为0x00011108,错误处的偏移地址为:

0x14C = 000011254 - 0x00011108(可以用windows计算器计算)。计算出偏移地址后,打开cod文件,寻找0x14C出现的位置,可以用记事本打开cod文件,用Ctrl+F查找14C,会定位到如下信息:

前边的;127就表示错误发生在代码中的第127行,分号应该是注释吧。

 

VS2005默认不会生成.map文件和.cod文件,修改以下两处就可以生成这两个文件了:

1.(.map)文件:在工程目录上右键->Properties->Configuration Properties->Linker->Debugging->Generate Map File(选择Yes(/MAP));

2.(.cod)文件:在工程目录上右键->Properties->Configuration Properties->C/C++->Output Files->Assembler Output(选择Assembly,Machine Code and Source(/FAcs))。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值