2009-04-16 40 views

回答

25

一篇關於如何使用地圖文件查找崩潰的好文章。

http://www.codeproject.com/KB/debug/mapfile.aspx

手工做的這一切是非常無趣。

我不知道任何可以讀取地圖文件並幫助找到崩潰位置的工具。如果有人知道請更新我們。

8

您很少需要它們,但它們可以方便地調試某些問題,因爲它們提供有關函數和數據位置的信息。

例如:

  • 上的所有段的詳細信息(代碼,數據和其它)。
  • 鏈接行號的代碼

您可以使用地圖文件進行調試工具。

+0

你的意思是像打開流程的反彙編和檢查原始地址? – sharptooth 2009-04-16 11:55:08

+0

這是一種可能性。就像我說的,你很少需要它們,但如果你需要它們,你很高興它們可用。 – 2009-04-16 11:56:30

12

對於嵌入式系統,映射文件更加有用。 (雖然你不會使用Visual C++是什麼;)

之類的東西知道你是運行了程序/數據存儲器的接近程度,什麼位置的特定變量在於,是很重要的。

8

的WinDBG使用.MAP和.pdb文件,以幫助調試崩潰,分析.hdmp和.mdmp崩潰轉儲時。

基本上它們將內存地址映射到.exe(或.dll)中的函數和變量。一般來說非常有用。

編輯:崩潰「事後」調試最有用的方法是使用WinDbg中,我(Windows平臺)。打開它並打開故障轉儲。然後將源路徑設置爲指向代碼(如果有的話),將符號路徑指向您的.map和.pdb,將圖像路徑指向.exe,然後在命令行中輸入「!analyze -v」 。現在你有一個完整的堆棧跟蹤代碼行和一切。
如果在路徑中有MS符號服務器,並且整個頁面堆已打開或adplus正在運行,則會更好。見我的這兩個最喜歡的WinDbg的資源:
第一站:: http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx
力載荷的符號:: http://www.osronline.com/ShowThread.cfm?link=182377
有用的網站:: http://www.dumpanalysis.org/blog/index.php/category/windbg-tips-and-tricks/page/7/

0

當你需要跟蹤鏈接地圖可以在大型項目中非常有用編譯單元和庫之間的依賴關係。通常情況下,鏈接器會報告導致問題的符號,而且通常只需搜索此符號名稱就不會返回任何結果(或者將返回大量符合read等符號的誤報)。

沒有接頭的地圖,你唯一的選擇是分析所有可用的源文件,並希望您找到相關的點(如果宏被使用,這通常是這種情況預處理後傳)。

鏈接器映射通常有一個名爲「由文件/符號引用」的節,它告訴您項目的另一個對象文件需要哪個對象文件,以及哪個符號被引用。

我曾經在一個項目上工作,該項目必須在沒有語言環境支持的系統上移植。鏈接器報告「未定義的參考_localeconv_r」錯誤,這將是一個痛苦,通過搜索來源追查。幸運的是,使用-Map=output.map生成的GCC鏈接器映射文件通過單個搜索顯示了所有有問題的功能。