2011-04-19 54 views
0

得到這個調用堆棧當我打開Visual Studio 2005中一個Windows崩潰轉儲:由於不匹配/缺少* system *二進制文件導致崩潰轉儲中的調用堆棧無效?

> myprog.exe!app_crash::CommonUnhandledExceptionFilter(_EXCEPTION_POINTERS * pExceptionInfo=0x0ef4f318) Line 41 C++ 
    pdm.dll!513fb8e2() 
    [Frames below may be incorrect and/or missing, no symbols loaded for pdm.dll] 
    [email protected]() + 0x1c7 bytes 
    ... 

望着模塊加載信息:

... 
'DumpFM-V235_76_1_0-20110412-153403-3612-484.dmp': Loaded '*C:\Program Files\Common Files\Microsoft Shared\VS7Debug\pdm.dll', No matching binary found. 
... 

我們看到,這個二進制甚至沒有裝,因爲用於分析轉儲的機器與生成轉儲的機器不同。

我現在還沒有訪問這臺機器 - 我可以以某種方式修復這個堆棧,或者我總是需要確切的二進制文件在這個確切的路徑位置嗎?

+0

您是否嘗試過在Windbg內加載轉儲? – Naveen 2011-04-19 18:25:31

+0

@Naveen - 尚未嘗試WinDBG。但爲什麼應該有什麼區別?我只是沒有這個DLL在這個位置,它appparently也不會通過MS的符號服務器獲取。 – 2011-04-19 18:31:56

回答

1

如果你絕對要在Visual Studio調試此轉儲,那麼你就可以逃脫複製從產生的轉儲到您的.dmp文件是同一文件夾中的計算機的系統DLL文件。這樣,它將加載這些二進制代碼,而不是試圖在調試系統上的相同路徑中找到它們,因爲它們在原始系統上(可能包含相同模塊的不同版本)。

由於Naveen指出,雖然在WinDBG中加載轉儲時不會出現這個問題(因爲我還沒有理解)。這就是爲什麼當我從客戶端獲得轉儲時,我總是在WinDBG中分析它們。

如果您需要關於使用WinDBG進行故障轉儲分析的幫助,以下Web站點上有關於此主題的信息:http://www.dumpanalysis.org/

+0

「在WinDBG中加載轉儲時,你不會遇到這個問題」...... WinDBG的做法究竟有什麼不同? (什麼,不是如何)還有一個不同的二進制文件,在MS符號服務器上沒有可用於pdm.dll的符號。當然,WinDBG無法做到魔術? – 2011-05-30 06:35:53

+1

你的問題是:「我將永遠需要在這個確切的路徑位置確切的二進制文件」。你沒有說你在調試器機器上沒有二進制文件(.dll)或.pdbs。 WinDbg與VS的不同之處在於,從我的經驗來看,它從來沒有關於丟失的二進制文件。當我有沒有.DLL文件的.pdb文件時,WinDbg仍然會加載.pdb並盡其所能。 VS會完全拒絕加載符號,所以甚至沒有空間去做任何事情。當然,沒有二進制文件或pdb文件,我沒有任何建議。 – franmon 2011-06-02 01:49:34

+0

接受答案。 ** WinDBG,unlinke VS,不需要實際的二進制文件**,只需dump-image和pdb文件就足夠了。 – 2013-10-08 10:13:52

1

另一種選擇是使用DebugInfo.com人員的ModuleRescue工具。這將掃描轉儲文件,允許您選擇不加載符號的模塊,然後生成一個假模塊,其中只有足夠的信息供調試器從符號服務器加載符號。

當Visual Studio無法加載此模塊的符號並打開一個對話框要求您查找符號時,只需將您的調試器指向該假模塊並且它將正確加載。

這個工具基本上和WinDbg做的一樣,儘管工作流程不同。

相關問題