2011-08-10 55 views
1

我正在調查一個錯誤的代碼。應用程序驗證表明堆在下面的呼叫後損壞:與me.Please使用映射文件查找崩潰位置

AA!Class::Function+dbaf 

我有地圖文件幫助我如何達成使用上述信息和禮物放在地圖文件信息的行號。

首選加載地址00400000

0002:00000dc4  [email protected]@@[email protected][email protected]@[email protected][email protected]@@[email protected]@@[email protected]@[email protected]@Z 0049bdc4 

注:我有匿名類和函數的名稱。

+0

它在線上。(我在回答中有匿名行數。) –

+0

@Kerrek,:)我喜歡你的答案。我是匿名的,因爲我的公司可能不喜歡這個。我希望你明白這一點。謝謝 – Satbir

+0

@Sabir:當然,請原諒這個笑話......真正的問題是,如果您不發佈一些代碼並自己調試以查明崩潰發生的位置,則幾乎不可能說出任何有用的信息。編譯調試符號開始,然後你的調試器應該已經能夠告訴你去哪兒了。 –

回答

1

您是否只有地圖文件?沒有PDB?如果你有完整的符號,那麼在WinDBG中使用地圖和.pdbs(和.exe)(你在Windows上?)。 我想你會看到你如何得到函數的名字。

如果不是...... dbaf就是你的答案。這等同於什麼?偏移量應該是錯誤指令的位置。 當然,你需要弄清楚每個指令的指令數量(彙編指令)。

+0

他有一個pdb,否則無法顯示AA!Class :: Function。這不是一個很好的,0xdbaf是一個很大的抵消。因此他的地圖可能也很糟糕。 –

+0

AA!Class :: Function + dbaf是報告堆腐敗的Application verifier的結果文件。感謝您的回答。我將在調試器中嘗試使用符號文件。 – Satbir

0

我記得能夠通過只有地圖文件和EIP的值(指令指針,代碼崩潰的地址)跳轉到錯誤代碼,快速谷歌搜索指向我的這個網頁:Map Files And DLL Rebasing。從我記憶中的理想情況中,您可以直接在Visual C++調試器中更改EIP的值,並跳轉到相應的代碼行。

現在,這真的是很久以前的Visual C++ 6時代,我甚至不知道它現在是否仍然適用。正如已經指出的那樣,你應該真的關注Visual C++中的符號和程序數據庫選項,有大量關於如何設置和使用它們的信息。