在 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
:
在 [方案總管] 中選取 C++ DLL 專案並選取 [屬性] 圖示,或者以滑鼠右鍵按一下專案並選取 [屬性]。
在 [屬性] 窗格中的 [連結器>偵錯]下,為 [可偵錯組件] 選取 [是] (/ASSEMBLYDEBUG)。
如需詳細資訊,請參閱 /ASSEMBLYDEBUG。
設定 C/C++ DLL 檔案位置
若要偵錯外部 DLL,呼叫專案必須能够找到 DLL、其 .pdb 檔案以及 DLL 所需的任何其他檔案。 您可以建立自訂建置工作,將這些檔案複製至<專案資料夾>\Debug 輸出資料夾中,也可以手動將檔案複製到該處。
對於 C/C++ 專案,可以在專案屬性頁中設定標頭和 LIB 檔案的位置,而不是將它們複製至輸出資料夾中。
若要設定 C/C++ 標頭和 LIB 檔案的位置:
在 [方案總管] 中選取 C/C++ DLL 專案並選取 [屬性] 圖示,或者以滑鼠右鍵按一下專案並選取 [屬性]。
在 [屬性] 窗格頂端的 [組態] 下,選取 [所有設定]。
在 C/C++>[一般]>[其他 Include 目錄] 下,指定包含標頭檔的資料夾。
在 [連結器]>[一般]>[其他程式庫目錄] 下,指定包含 LIB 檔案的資料夾。
在 [連結器]>[輸入]>[其他相依性] 下,指定 LIB 檔案的完整路徑和檔案名稱。
選取 [確定]。
如需 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
的方法:
在 DLL 專案開啟的情况下,透過選擇 [偵錯>Windows]>[即時運算] 或按 Ctrl+Alt+I 開啟 [即時運算] 視窗。
透過在 [即時運算] 視窗中輸入以下 C# 程式碼並按 Enter 來具現化類型
Class1
的物件。 此受控程式碼適用於 C# 和 Visual Basic,並進行了適當的語法變更:Class1 obj = new Class1();
在 C# 中,所有名稱都必須是完整名稱。 當語言服務嘗試評估運算式時,任何方法或變數都必須在目前範圍和內容中。
假設
Test
使用了一個int
參數,並使用 [即時運算]Test
視窗評估 :?obj.Test(10);
結果將列印在 [即時運算] 視窗中。
您可以將中斷點放置在
Test
內繼續對其進行偵錯,然後再次評估該函式。將叫用中斷點,您可以逐步執行
Test
。 當執行離開Test
之後,偵錯工具會返回設計模式。
混合模式偵錯
您可以在受控或機器碼中為 DLL 寫入呼叫應用程式。 如果您的原生應用程式呼叫受控 DLL,並且希望同時偵錯兩者,則可以在專案屬性中啟用受控和原生偵錯工具。 具體流程取決於您是從 DLL 專案還是從呼叫應用程式專案開始偵錯。 如需詳細資訊,請參閱如何:在混合模式中偵錯。
您還可以從受控呼叫專案偵錯原生 DLL。 如需更多資訊,請參閱如何偵錯受控程式碼和機器碼。
相關內容
- 對受控碼進行偵錯
- 準備偵錯 C++ 專案
- C#, F#, and Visual Basic project types (C#、F# 和 Visual Basic 專案類型)
- Project settings for a C++ Debug configuration (C++ 偵錯組態的專案設定)
- .NET C# 偵錯組態的專案設定
- Project settings for C# Debug configurations (C# 偵錯組態的專案設定)
- Project settings for a Visual Basic Debug configuration (Visual Basic 偵錯組態的專案設定)
- 偵錯工具安全性