共用方式為


在 Visual Studio 中偵錯 DLL(C#、C++、Visual Basic、F#)

DLL (動態連結庫) 是一個連結庫,其中包含多個應用程式可以使用的程式代碼和數據。 您可以使用 Visual Studio 來建立、建置、設定及偵錯 DLL。

建立 DLL

下列 Visual Studio 專案範本可以建立 DLL:

  • 類別庫 (.NET、.NET Framework 和其他應用程式平臺)
  • Windows Forms 控件連結庫 (.NET 和 .NET Framework)
  • Dynamic-Link 函式庫 (DLL) (C++)

偵錯 Windows Forms 控制項程式庫與偵錯類別庫相似。 如需詳細資訊,請參閱 Windows Forms 控件

您通常會從另一個專案呼叫 DLL。 當您調試呼叫專案時,根據 DLL 的配置,您可以進入並調試 DLL 代碼。

DLL 偵錯組態

當您使用Visual Studio專案範本來建立應用程式時,Visual Studio 會自動建立偵錯和發行組建組態的必要設定。 您可以視需要變更這些設定。 如需詳細資訊,請參閱下列文章:

設定 C++ DebuggableAttribute

若要讓除錯程式附加至 C++ DLL,C++ 程式碼必須發出 DebuggableAttribute

若要設定 DebuggableAttribute

  1. 方案 總管中選取C++ DLL 專案,然後選取 [屬性 ] 圖示,或以滑鼠右鍵按兩下專案,然後選取 [ 屬性]。

  2. 在 [屬性] 窗格的 [連結器偵錯]> 底下,選取 [是 (/ASSEMBLYDEBUG)] 以設定 可偵錯元件

如需詳細資訊,請參閱 /ASSEMBLYDEBUG

設定 C/C++ DLL 檔案位置

若要偵錯外部 DLL,呼叫項目必須能夠尋找 DLL、其 .pdb 檔案,以及 DLL 所需的任何其他檔案。 您可以建立自定義建置工作,將這些檔案複製到您的<專案資料夾>\偵錯輸出資料夾,也可以手動複製該處的檔案。

針對 C/C++ 專案,您可以在專案屬性頁中設定標頭和 LIB 檔案位置,而不是將它們複製到輸出資料夾。

若要設定 C/C++ 標頭和 LIB 檔案位置:

  1. 方案 總管中選取 C/C++ DLL 專案,然後選取 [屬性 ] 圖示,或以滑鼠右鍵按兩下專案,然後選取 [ 屬性]。

  2. 在 [ 屬性] 窗格頂端的 [ 組態] 底下,選取 [所有組態]。

  3. C/C++>一般>附加包含目錄底下,指定包含標頭檔案的資料夾。

  4. [鏈接器>一般>其他連結庫目錄] 下,指定具有 LIB 檔案的資料夾。

  5. [鏈接器>輸入>其他相依性] 下,指定 LIB 檔案的完整路徑和檔名。

  6. 請選擇 [確定]

如需C++專案設定的詳細資訊,請參閱 Windows C++屬性頁參考

建置偵錯版本

開始偵錯之前,請務必建置 DLL 的偵錯版本。 若要對 DLL 進行偵錯,呼叫的應用程式必須能夠尋找其 .pdb 檔案 ,以及 DLL 所需的任何其他檔案。 如需詳細資訊,請參閱 如何:設定偵錯和發行組態

您可以建立自訂的建置工作,將 DLL 檔案複製到 <呼叫的專案資料夾>\Debug 輸出資料夾,或者您也可以手動將檔案複製到該處。

請務必在正確的位置呼叫 DLL。 這可能看起來很明顯,但如果呼叫的應用程式找到並載入不同的 DLL 副本,除錯器就永遠無法觸發您設定的斷點。

除錯 DLL

您無法直接執行 DLL。 它必須由應用程式呼叫,通常是 .exe 檔案。

若要偵錯 DLL,您可以從 呼叫的應用程式開始偵錯,或藉由指定其呼叫應用程式 從 DLL 專案 進行偵錯。 您也可以在設計時間使用調試程式 [即時運算] 視窗 來評估 DLL 函式或方法,而不需使用呼叫的應用程式。

從呼叫應用程式開始偵錯

呼叫 DLL 的應用程式可以是:

  • 來自與 DLL 相同或不同方案中的 Visual Studio 專案之應用程式。
  • 已在測試或生產計算機上部署和執行的現有應用程式。
  • 位於 Web 上,並透過 URL 存取。
  • 具有內嵌 DLL 之網頁的 Web 應用程式。

開始偵錯呼叫的應用程式之前,請在 DLL 中設定斷點。 請參閱 斷點入門。 當 DLL 斷點觸發時,您可以逐步執行程式碼,觀察每一行的動作。 如需詳細資訊,請參閱 在調試程式中巡覽程序代碼

若要從呼叫的應用程式對 DLL 進行偵錯,您可以:

  • 開啟呼叫應用程式的專案,並選取>開始偵錯 或按 F5 來開始偵錯。

  • 附加至已在測試或生產計算機上部署和執行的應用程式。 針對網站或 Web 應用程式中的 DLL 使用此方法。 如需詳細資訊,請參閱 如何:附加至執行中的進程

在偵錯期間,您可以使用 [ 模組 ] 視窗來確認應用程式載入的 DLL 和 .exe 檔案。 若要開啟模組視窗,請在偵錯時選取偵錯>視窗>模組。 如需詳細資訊,請參閱 如何:使用模組視窗

使用 [立即] 視窗

您可以使用 即時視窗 在設計時間評估 DLL 函式或方法。 [即時 視窗] 扮演呼叫應用程式的角色。

備註

您可以在設計時間搭配大部分專案類型使用 即時 視窗。 不支援 SQL、Web 專案或腳本。

例如,若要在類別Test中測試名為 Class1 的方法:

  1. 開啟 DLL 專案後,選取 [偵錯]、[Windows]、[即時] 或按下 Ctrl>> 來開啟 [即時] 視窗。

  2. Class1視窗中輸入下列 C# 程式碼並按 Enter 鍵,以建立一個類型為 的物件。 此受控程式碼適用於 C# 和 Visual Basic,需要適當的語法變更:

    Class1 obj = new Class1();
    

    在 C# 中,所有名稱都必須完整定義。 當語言服務嘗試評估表達式時,任何方法或變數都必須位於目前的範圍和內容中。

  3. 假設Test採用一個int參數,請使用 Test視窗來評估

    ?obj.Test(10);
    

    結果會列印在 即時 視窗中。

  4. 您可以繼續偵錯Test,方法是在其中放置斷點,然後再次評估該函式。

    斷點將被觸發,然後您可以逐步執行 Test。 執行離開 Test之後,調試程式會回到設計模式。

混合模式偵錯

您可以用受控代碼或原生代碼撰寫一個 DLL 的呼叫應用程式。 如果您的原生應用程式呼叫 Managed DLL,而且您想要同時偵錯兩者,您可以在專案屬性中同時啟用 Managed 和原生調試程式。 確切的過程取決於您要從 DLL 專案還是呼叫應用程式的專案開始進行偵錯。 如需詳細資訊,請參閱 如何:以混合模式進行偵錯

您也可以從 Managed 呼叫專案對原生 DLL 進行偵錯。 如需詳細資訊,請參閱 如何偵錯 Managed 和機器碼