WinCE中的Data/ Prefetch Abort等异常定位
在调试WinCE程序的时候,有时候会碰到Data/Prefetch Abort的异常,相信从事过WinCE开发的人对这种异常信息应该都不会陌生,系统会在调试控制台输出如下类似信息:
Exception 'Prefetch Abort' (3): Thread-Id=05870016(pth=
如下图:
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,错误处的偏移地址为:
0x
前边的;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))。