分享方式:


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

DLL (動態連結程式庫) 是包含可供多個應用程式使用的程式碼和資料之程式庫。 您可以使用 Visual Studio 建立、建置、設定和偵錯 DLL。

建立 DLL

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

  • C#、Visual Basic 或 F# 類別庫
  • C# 或 Visual Basic Windows Forms 控制項 (WCF) 程式庫
  • C++ 動態連結程式庫 (DLL)

如需詳細資訊,請參閱 MFC 偵錯技術

偵錯 WCF 程式庫類似於偵錯類別庫。 如需詳細資料,請參閱 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 所需的任何其他檔案。 您可以建立自訂建置工作,將這些檔案複製至<專案資料夾>\Debug 輸出資料夾中,也可以手動將檔案複製到該處。

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

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

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

  2. [屬性] 窗格頂端的 [組態] 下,選取 [所有設定]

  3. C/C++>[一般]>[其他 Include 目錄] 下,指定包含標頭檔的資料夾。

  4. [連結器]>[一般]>[其他程式庫目錄] 下,指定包含 LIB 檔案的資料夾。

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

  6. 選取 [確定]。

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

建置「偵錯」版本

在開始偵錯之前,請確保建置 DLL 的「偵錯」版本。 若要偵錯 DLL,呼叫應用程式必須能够找到其 .pdb 檔案和 DLL 所需的任何其他檔案。

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

請確保在正確的位置呼叫 DLL。 這可能看起來很明顯,但如果呼叫應用程式找到並載入 DLL 的不同複本,偵錯工具將永遠不會達到您設定的中斷點。

偵錯 DLL

您不能直接執行 DLL。 它必須由應用程式呼叫,通常是 .exe 檔案。 如需詳細資訊,請參閱 Visual Studio 專案 - C++

若要偵錯 DLL,您可以從呼叫應用程式開始偵錯,或透過指定其呼叫應用程式從 DLL 專案開始偵錯。 您也可以使用偵錯工具 [即時運算] 視窗在設計階段評估 DLL 函式或方法,而無需使用呼叫應用程式。

如需詳細資訊,請參閱首先查看偵錯工具

從呼叫應用程式開始偵錯

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

  • DLL 中相同或不同解決方案中的 Visual Studio 專案中的應用程式。
  • 已在測試或生產電腦上部署並執行的現有應用程式。
  • 位於 Web 上並經由 URL 存取。
  • 具有內嵌 DLL 的網頁之 Web 應用程式。

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

  • 開啟呼叫應用程式的專案,然後選取 [偵錯]>[開始偵錯]或按 F5 鍵開始偵錯。

  • 附加至已部署並在測試或生產電腦上執行的應用程式。 對網站或 Web 應用程式中的 DLL 使用此方法。 如需詳細資訊,請參閱如何:附加至執行中處理序

在開始偵錯呼叫應用程式之前,請在 DLL 中設定中斷點。 請參閲使用中斷點。 當叫用 DLL 中斷點時,您可以逐步執行程式碼,觀察每行的動作。 如需詳細資訊,請參閱在偵錯工具中瀏覽程式碼

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

使用 [即時運算] 視窗

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

注意

您可以在設計階段對大多數專案類型使用 [即時運算] 視窗。 SQL、Web 專案或指令碼不支援它。

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

  1. 在 DLL 專案開啟的情况下,透過選擇 [偵錯>Windows]>[即時運算] 或按 Ctrl+Alt+I 開啟 [即時運算] 視窗。

  2. 透過在 [即時運算] 視窗中輸入以下 C# 程式碼並按 Enter 來具現化類型 Class1 的物件。 此受控程式碼適用於 C# 和 Visual Basic,並進行了適當的語法變更:

    Class1 obj = new Class1();
    

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

  3. 假設 Test 使用了一個 int 參數,並使用 [即時運算] Test視窗評估

    ?obj.Test(10);
    

    結果將列印在 [即時運算] 視窗中。

  4. 您可以將中斷點放置在 Test 內繼續對其進行偵錯,然後再次評估該函式。

    將叫用中斷點,您可以逐步執行 Test。 當執行離開 Test 之後,偵錯工具會返回設計模式。

混合模式偵錯

您可以在受控或機器碼中為 DLL 寫入呼叫應用程式。 如果您的原生應用程式呼叫受控 DLL,並且希望同時偵錯兩者,則可以在專案屬性中啟用受控和原生偵錯工具。 具體流程取決於您是從 DLL 專案還是從呼叫應用程式專案開始偵錯。 如需詳細資訊,請參閱如何:在混合模式中偵錯

您還可以從受控呼叫專案偵錯原生 DLL。 如需更多資訊,請參閱如何偵錯受控程式碼和機器碼