2008-12-08 237 views
13

我正在使用第三方DLL。對於某些特定情況,DLL中的函數會拋出異常。是否有可能在Visual Studio中調試DLL?在Visual Studio中調試第三方DLL?

the answer from Andrew Rollings之後,我能夠查看代碼,但有沒有簡單的方法通過Visual Studio中的代碼進行調試?

+1

是的,將代碼提取到文件中,將它們添加到dll項目並重新編譯dll。 將此項目添加到您的解決方案中,並將參考更改爲指向該項目。 然後你應該可以調試它。 – 2008-12-08 17:28:24

+0

我有類似的問題。所有的資源都屬於我,但我不能將它們添加到參考項目中。有超過20個項目涉及...並沒有下面的解決方案真的有幫助 – TimothyP 2009-12-14 05:54:28

回答

15

如果該DLL採用.NET語言,則可以使用類似.NET Reflector的工具對其進行反編譯,然後根據源代碼進行調試。

或者如果源代碼可用,您可以詢問供應商。這可能是最簡單的方法。

+0

它是.Net DLL,我有一個反射器,讓我試試這樣做。謝謝。 – Biswanath 2008-12-08 15:55:47

+2

NET的反射6配備了Visual Studio的加載項,可以讓你對你沒有的源代碼組件使用Visual Studio的一步,通過調試。 – 2009-10-29 18:22:55

5

基於Andrew的答案,您只需將反編譯後的源代碼作爲項目中的新庫,並在源代碼中設置斷點即可。刪除所有對第三方DLL的引用,以便它是正在執行的反編譯代碼。

其他的事情:

  • 您可以通過反編譯代碼違反法律,違反或與第三方供應商提供的許可協議。請務必與某人一起回顧。
  • 如果您要發送給其他開發人員或檢入更大的源代碼樹,您將需要確保刪除對反編譯版本的引用。容易忘記這一點!
+3

+1提高對違反法律或違反許可協議 – JeffH 2009-04-21 16:05:11

0

我以爲.NET Reflector有一些調試插件。這將是一個好主意,因爲反編譯和重新編譯代碼通常會失敗,並且您需要在代碼中做很多修改才能修復它。

嘗試給.NET反射器調試器。它可能會幫助你很多。

3

有兩種方法我遇到:

1)訪問從使用項目的DLL項目。 這涉及在單獨的Visual Studio實例中構建DLL,然後通過Visual Studio中的其他項目(假定您有源代碼)訪問DLL。 有多種方式來實現:

  • 您可以將在Visual Studio中的「輸出」窗口顯示 了DLL添加Trace.WriteLine 語句。
  • 您可以將System.Diagnostics.Debugger.Break()語句添加到DLL代碼。當在Visual Studio中運行調用項目 時, 程序執行將在那裏停止。 從這裏您可以添加訪問 調用堆棧(包括DLL本身的所有功能 調用),並設置斷點 點(雖然 圖標斷點將出現禁用 和休息 點會讀「懸停文本目前沒有命中斷點,當前沒有符號 「)。
  • 如果DLL拋出異常(你可以從 看到「輸出」窗口,如果該異常 被捕獲並通過DLL處理) 你可以告訴Visual Studio時 該類型例外的是要始終破拋出。 命中按Ctrl + Alt鍵+Ë,發現被拋出 異常的類型,然後單擊 爲 例外「扔」列。從這裏,它正好是 ,就好像你已經使用 System.Diagnostics.Debugger.Break() (見上)。

2)附加一個使用過程的DLL項目。 這涉及將Visual Studio調試器掛接到正在運行的進程中。

  • 在Visual Studio中打開DLL項目。
  • 運行一個應用程序,使用DLL(這 應用程序不能從 運行Visual Studio的另一個實例,因爲 過程中就已經連有一個調試器 )。
  • 從這裏您可以添加中斷點,並通過 加載Visual Studio中的DLL代碼(儘管 中斷點將出現禁用 與方法1中相同)。
3

對我來說調試了幾個第三方庫以及.NET本身的東西是WinDbg。這是一個來自微軟的令人敬畏的調試器,我曾用它來排除框架內發生的一些粘性問題。

如果它是託管DLL,則需要使用Son of Strike(SOS)擴展。它也可以調試本地。您需要了解一些有關使用它的說明和彙編/ CIL說明。您應該能夠確定異常以及導致它的原因。我們使用WinDbg/SOS來查找HttpWebResponse中的實例,如果您使用Gzip壓縮來下載頁面,並且服務器返回一個錯誤的Gzip頭部,.NET將在線程池中運行解壓縮,並且崩潰將取消您的過程。快樂調試。

0

.NET Reflector 6附帶了一個Visual Studio插件,它允許您在沒有源代碼的程序集上使用Visual Studio的逐步調試。

看一看這個博客帖子:

http://www.simple-talk.com/community/blogs/alex/archive/2009/09/22/74919.aspx瞭解更多詳情。

這仍然是一個非常早期的構建。所以不能保證它可以工作,並且可能會破壞你的視覺工作室配置或項目配置。確保你有任何項目使用備份(或源代碼管理)。

這裏下載: http://www.red-gate.com/MessageBoard/viewforum.php?f=109