2017-04-07 55 views
1

我試圖用MiniDumpWriteDump產生一個最小的內存轉儲在那裏我可以追溯一個PDB附加符號。目前,這可以使用MiniDumpWithFullMemory,但會生成非常大的轉儲文件。解析符號轉儲

生產具有MiniDumpNormal轉儲產生一個小的文件,並給出了偏移量的堆棧跟蹤,但我不能讓Visual Studio或WinDbg中加載的符號。 Visual Studio的只是告訴我,

Binary was not built with debug information

WinDbg的告訴我:

ERROR: Symbol file could not be found. Defaulted to export symbols for app.exe.

我已經試過標誌的幾種組合,但沒有使用MiniDumpWithFullMemory無法加載符號。什麼是一組標誌來生成可以解析堆棧跟蹤符號的最小可能轉儲?

可執行文件使用調試信息(/ Zi/DEBUG)構建,將調試器附加到正在運行的進程加載符號,將調試器附加到崩潰進程(在WER觸發器上)加載符號並生成轉儲MiniDumpWithFullMemory也加載符號,但其他轉儲類型不加載符號。

+2

[「二進制沒有與調試信息構建」的警告在mfc應用程序中的意義?](http://stackoverflow.com/questions/12721864/binary-was-not-built-with-debug-information- warning-meaning-in-mfc-applicatio) –

+1

這不是該問題的重複,它是用調試信息構建的,並且會在使用MiniDumpWithFullMemory轉儲時加載符號。 – tx34

+0

加載符號懶洋洋地也被稱爲defferred加載它是沒有絲毫關係完全正常迷你ORR內核lloaded模塊列表是流讓你有一些其他的問題,請確保你建立你都調試版本,以及與調試infirmation發行版本。確保你在你的priject的命令行中看到/ zi,如果windbg說沒有符號默認導出符號,那麼確保生成了pdb,這意味着你的二進制文件沒有符號。並且小型轉儲器只是將其轉儲爲 – blabb

回答

1

這個問題的最令人困惑的部分是如何將所有調試,不同的是降低小型轉儲正常工作。檢查可執行文件發現問題:

symchk app.exe /v

dumpbin /headers app.exe | grep pdb

表明在exe中沒有pdb信息。在我的編譯系統的檢查,我發現一個額外的創建步驟,被嵌入使用清單:

MT.exe -manifest C:\app.exe.manifest -outputresource:C:\app.exe;1

這是造成PDB信息,以獲得剝奪。

卸下此生成步驟保持的調試信息,並且允許從MiniDumpNormal轉儲加載符號。

+0

這是一個令人驚訝的副作用的清單工具。出於好奇,當你嘗試在調試器中打開轉儲時,你是否嘗試過將exe,minidump和pdb全部放在同一個目錄中?使用chkmatch查看它是否認爲exe和pdb文件實際匹配可能也很有趣。 –

+0

@AdrianMcCarthy使用顯式的exe時,將pdb/exe/dmp放在同一個目錄下不會加載符號。Chkmatch給出:'可執行文件: TimeDateStamp:58ed3297 調試信息:2(的CodeView) 時間戳:58ed3297特性:0 MajorVer:0 MinorVer:0 尺寸:92 RVA:01333e28的FileOffset:01332a28 的CodeView簽名:0 \ = A 調試信息:12(未知) 時間戳:58ed3297特性:0 MajorVer:0 MinorVer:0 尺寸:20 RVA:01333e84的FileOffset:01332a84 調試信息文件: 格式:PDB 7.00 結果:無與倫比的(原因:不兼容的調試信息格式)' – tx34