2012-10-14 43 views
4

現在我有崩潰信息:如何從堆棧中找到崩潰代碼行?

TestAPP導致訪問衝突(0000005) 模塊XCrashReportTest.exe在0023:5763c230。

Context: 
EDI: 0x002aee0c ESI: 0x002ad7f4 EAX: 0x00000000 
EBX: 0x00000000 ECX: 0x57635670 EDX: 0x028c1d27 
EIP: 0x5763c230 EBP: 0x002aee18 SegCs: 0x00000023 
EFlags: 0x00010246 ESP: 0x002ad554 SegSs: 0x0000002b 

Bytes at CS:EIP:             
8b 08 52 50 8b 41 18 ff d0 8b 0d c8 e0 66 57 8b     

Stack:               
0x002ad554: 576504f7 002aee0c 002ad7f4 002ad570 ..eW..*...*.p.*. 
0x002ad564: 002aee0c 5763c201 002aee18 002ad59c ..*...cW..*...*. 
0x002ad574: 576490b1 5763c201 002aee0c 00000100 ..dW..cW..*..... 
0x002ad584: 002ad5f4 57648d9f 75785eaa 57668e70 ..*...dW.^xup.fW 
0x002ad594: 002aee0c 00000001 002ad604 5764d4d2 ..*.......*...dW 
0x002ad5a4: 002aee0c 57668e70 5763c201 00000000 ..*.p.fW..cW.... 
0x002ad5b4: 00000100 75785d2a 57668e5c 002aee0c ....*]xu\.fW..*. 
0x002ad5c4: 57668e4c 002add84 00000000 00000000 L.fW..*......... 

我指的是XCrashReport [XCrashReport:異常處理和崩潰報告 - 第1部分

但我發現,有時EIP不同,當我運行相同的* .exe在同一臺機器。因此,有時我無法將代碼的崩潰行與EIP匹配(在XCrashReport中描述的方法:異常處理和崩潰報告 - 第1部分。我不知道如何使用堆棧信息。

任何人都可以幫助我的?

+0

生成一個地圖文件並使用它......它應該開始讓你的生活更輕鬆,因爲你將能夠在你的堆棧中識別特定的功能地址......它的努力工作跟蹤這樣的報告中的錯誤,但是很好值得學習藝術...... – Goz

回答

3

這樣做的唯一合理方法是將你的崩潰轉儲加載到調試器中並提供符號,即.pdb文件,這可能會很棘手,因爲pdb文件可能沒有足夠的信息。公共PDB文件沒有關於本地變量名稱和其他細節的信息PDB具有完整信息的PDB被稱爲公共PDB

有時堆棧被破壞,在失去控制權的情況下。代碼拾取返回地址,這是一些垃圾,將此值加載到EIP中並從那裏開始執行指令。在這種情況下,執行一些「指令」後很快就會發生崩潰。

我的意思是你需要弄清楚你的EIP是否先指向任何代碼。

相關問題