2011-05-16 113 views
3

我試圖從.DMP文件調試C#應用程序,並且在可執行文件,DLL和PDB中都有一個名爲「MyFolder」的文件夾。我將包含源代碼的目錄設置爲C:\ MyFolder \,但是當我嘗試調試時,它告訴我:Visual Studio 2008調試時沒有加載符號.DMP

「沒有爲任何調用堆棧幀加載符號,源代碼無法顯示。

當我打開它指出以下PDBS找不到符號負載信息:

C:\ WINDOWS \ SYSTEM32 \ kernel32.pdb:無法找到或打開PDB文件。
C:\ MyFolder \ kernel32.pdb:無法找到或打開PDB文件。
C:\ MyFolder \ symbols \ dll \ kernel32.pdb:無法找到或打開PDB文件。
C:\ MyFolder \ dll \ kernel32.pdb:無法找到或打開PDB文件。
C:\ MyFolder \ kernel32.pdb:無法找到或打開PDB文件。
C:\ Windows \ symbols \ dll \ kernel32.pdb:無法找到或打開PDB文件。
C:\ Windows \ dll \ kernel32.pdb:無法找到或打開PDB文件。
C:\ Windows \ kernel32.pdb:無法找到或打開PDB文件。

我的PDB位於正確的文件夾中,並且它們使用完全相同的時間和日期進行了時間戳。有人知道這裏發生了什麼嗎?加載符號的正確方法是什麼?

如何驗證我的應用程序的符號是否實際加載(消除它們作爲問題)? 我檢查了模塊,它看起來像所有的DLL和我的項目的可執行文件無法加載符號,具體來說符號狀態是「符號文件中沒有本地符號」......當我右鍵點擊該項目我選擇「Load Symbols From - > Symbol Path」,然後選擇PDB C:\ MyFolder \ MyApplication.pdb,然後它告訴我「MyApplication.pdb的符號文件與模塊不匹配。」

回答

2

這聽起來像轉儲文件是本機代碼minidump,而不是託管代碼minidump,因爲所有這些DLL的符號通常不是託管調試的關鍵,除非您調試混合模式應用程序,調試到Win32調用或調試託管/非託管邊界。

這取決於如何創建小型轉儲。如果它位於不同的操作系統或Service Pack上的另一臺計算機上,則可能需要設置符號路徑以從另一臺計算機獲取系統DLL的確切PDB,而不是您的應用程序assmeblies和符號。如果這些非託管符號正確,您的託管調試體驗將會得到改善。 爲了使.NET的「微版本」和原生圖像能夠與堆棧跟蹤一起工作,使事情進一步複雜化。

+0

軟件加載一個64位的Windows Server 2008 R2上,我直接複製的文件夾從服務器(其包括PDBS)和我調試它在64位Windows 7的機器上。 PDB是從任務管理器(TM)生成的,TM是否也只創建了本地代碼小轉儲?它是一個C#應用程序,所以它應該全部是託管代碼..有沒有辦法獲得和調試託管代碼小型轉儲? – Kiril 2011-05-16 20:50:15

+0

@Link:你的小型轉儲可能沒問題,讓我們來設置你的符號。對於非託管調試,你需要2008 PDB,所以你需要一個符號服務器,如下所述:http://msdn.microsoft.com/en-us/library/b8ttk8zy(v=VS.90).aspx – 2011-05-16 21:01:25

+0

我會給一槍!謝謝里克! – Kiril 2011-05-16 21:33:54

0

您必須確保:

  • 可執行文件/ DLL和PDBS是相同的構建。 PDB內部使用GUID來確定相關的EXE/DLL是否正確。否則,它不會加載符號。這不是VS本身,而是來自DbgHelp.DLL。
  • 確保您使用的源文件集絕對正確。即使「源文件必須匹配」選項是未設置 VS調試選項,VS不關心加載.DMP文件 - 它不會加載符號如果源文件不匹配。
相關問題