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))。
總結
以上是生活随笔為你收集整理的WinCE中的Data/ Prefetch Abort异常定位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE下的MINGW交叉编译环境下内
- 下一篇: WINCE的FFMPEG交叉编译环境搭建