2009-06-10 84 views
4

我有一個項目,導入一個DLL(由我寫的)。有時,當在DLL中的方法中引發異常時,主機項目會打開一個選項卡,讓我看到DLL中的代碼。我也可以在其中加入斷點。VisualStudio/C#:調試導入的DLL

但這種行爲似乎相當隨機的,我不能有它的目的,而且並不總是有效。另外,我無法在項目資源管理器窗口中看到文件名。

調試DLL的任何幫助?由於

回答

12

增強調試(不當前解決方案中一個dll)在很大程度上取決於是否有一個明顯的位置,調試符號文件(.PDB) - 特別是,旁邊的DLL本身。您也可以手動從組件窗口中加載符號(調試時,調試 - >視窗 - >模塊,用鼠標右鍵單擊,加載符號從...)

+5

...,雖然沒有調試......你可以從工具 - >選項 - > Debugging->符號 – Aamir 2009-06-10 10:53:39

1

要調試的dll它必須與該DLL匹配調試信息的PDB文件。

1

Visual Studio中使用由編譯過程中產生的.PDB符號使您能夠在發生異常時讓開發人員查看源代碼。

此信息存在的原因有兩個。第一個原因是編譯器(即將源代碼轉換爲應用程序的程序,例如.exe或.dll文件)在構建應用程序時使用。第二個原因是人們在調試應用程序時使用。符號信息是作爲應用程序編譯的一部分生成的(如果您將編譯器設置爲生成符號信息)。這些信息可以直接駐留在應用程序文件中,也可以寫入單獨的符號文件。符號所在的位置取決於您的開發應用程序和您選擇的設置。例如,Microsoft Visual Basic(VB)將符號直接構建到程序文件中。 Visual C++(VC++)通常建立一個或兩個單獨的文件。

符號文件有兩種文件類型-dbg和.pdb。 .dbg文件採用通用對象文件格式(Common Object File Format,COFF),這是一種通用符號文件描述,不包含源代碼行信息;許多調試器可以讀取這些文件。 .pdb文件是Microsoft格式,並且包含比.dbg文件更多的信息。例如,源代碼行信息僅在.pdb符號中可用。包含源代碼行信息的符號文件使您可以使用源代碼進行調試。

+0

設置符號路徑,但我怎麼能設置一個突破點或看到的代碼? – pistacchio 2009-06-10 11:05:43

1

雖然它不會讓你調試代碼,Reflector是非常有用的,當涉及到檢查的DLL。堆棧跟蹤,有問題的DLL和反射器的組合通常會使您找到問題的根源。

2

什麼可以在這裏用自己的方式越來越是被稱爲僅我的代碼(JMC)功能。這是一個調試器/ CLR功能,旨在將用戶的世界視圖限制爲他們編寫的代碼。有關如何確定一段代碼或DLL是否屬於你的各種方式有時會令人困惑。

接下來你打這個問題的時候,試試禁用江鈴,看看它是否解決您的問題

  • 導航:工具 - >選項
  • 導航:調試 - >一般
  • 取消選中僅我的代碼選項
2

在託管的C#程序中調用C++ dll, 右鍵單擊屬性 調試選項卡 打勾啓用非託管代碼調試

希望這會有所幫助, Tony。