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
:
在 方案 總管中選取C++ DLL 專案,然後選取 [屬性 ] 圖示,或以滑鼠右鍵按兩下專案,然後選取 [ 屬性]。
在 [屬性] 窗格的 [連結器偵錯]> 底下,選取 [是 (/ASSEMBLYDEBUG)] 以設定 可偵錯元件。
如需詳細資訊,請參閱 /ASSEMBLYDEBUG。
設定 C/C++ DLL 檔案位置
若要偵錯外部 DLL,呼叫項目必須能夠尋找 DLL、其 .pdb 檔案,以及 DLL 所需的任何其他檔案。 您可以建立自定義建置工作,將這些檔案複製到您的<專案資料夾>\偵錯輸出資料夾,也可以手動複製該處的檔案。
針對 C/C++ 專案,您可以在專案屬性頁中設定標頭和 LIB 檔案位置,而不是將它們複製到輸出資料夾。
若要設定 C/C++ 標頭和 LIB 檔案位置:
在 方案 總管中選取 C/C++ DLL 專案,然後選取 [屬性 ] 圖示,或以滑鼠右鍵按兩下專案,然後選取 [ 屬性]。
在 [ 屬性] 窗格頂端的 [ 組態] 底下,選取 [所有組態]。
在 C/C++>一般>附加包含目錄底下,指定包含標頭檔案的資料夾。
在 [鏈接器>一般>其他連結庫目錄] 下,指定具有 LIB 檔案的資料夾。
在 [鏈接器>輸入>其他相依性] 下,指定 LIB 檔案的完整路徑和檔名。
請選擇 [確定]。
如需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
的方法:
開啟 DLL 專案後,選取 [偵錯]、[Windows]、[即時] 或按下 Ctrl>> 來開啟 [即時] 視窗。
在
Class1
視窗中輸入下列 C# 程式碼並按 Enter 鍵,以建立一個類型為 的物件。 此受控程式碼適用於 C# 和 Visual Basic,需要適當的語法變更:Class1 obj = new Class1();
在 C# 中,所有名稱都必須完整定義。 當語言服務嘗試評估表達式時,任何方法或變數都必須位於目前的範圍和內容中。
假設
Test
採用一個int
參數,請使用Test
視窗來評估:?obj.Test(10);
結果會列印在 即時 視窗中。
您可以繼續偵錯
Test
,方法是在其中放置斷點,然後再次評估該函式。斷點將被觸發,然後您可以逐步執行
Test
。 執行離開Test
之後,調試程式會回到設計模式。
混合模式偵錯
您可以用受控代碼或原生代碼撰寫一個 DLL 的呼叫應用程式。 如果您的原生應用程式呼叫 Managed DLL,而且您想要同時偵錯兩者,您可以在專案屬性中同時啟用 Managed 和原生調試程式。 確切的過程取決於您要從 DLL 專案還是呼叫應用程式的專案開始進行偵錯。 如需詳細資訊,請參閱 如何:以混合模式進行偵錯。
您也可以從 Managed 呼叫專案對原生 DLL 進行偵錯。 如需詳細資訊,請參閱 如何偵錯 Managed 和機器碼。