偵錯 DLL 專案
這個主題適用於:
版本 |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
|||||
Pro、Premium 和 Ultimate |
下列範本會建立 DLL:
(C++、C# 和 Visual Basic) 類別庫
(C++、C# 和 Visual Basic):Windows Form 控制項程式庫
Windows 控制項程式庫的偵錯方式與偵錯類別庫專案的方式相似。 在大多數的情況,您會從另一個專案呼叫 Windows 控制項。 當您偵錯呼叫專案時,您可以逐步執行您的 Windows 控制項的程式碼、設定中斷點,和執行其他偵錯工作。 如需詳細資訊,請參閱 Windows Form 控制項。
(C# 和 Visual Basic):Web 控制項程式庫
如需詳細資訊,請參閱 Web 控制項程式庫 (Managed 程式碼)。
(C++):MFC ActiveX 控制項和 MFC 智慧型裝置 ActiveX 控制項
ActiveX 控制項是一種可以透過網際網路下載至用戶端電腦的控制項,並可在網頁上顯示和啟動。
偵錯 ActiveX 控制項與偵錯其他種類的控制項相似,因為它們都無法獨立執行,必須嵌入 HTML 網頁中才能執行。 如需詳細資訊,請參閱 HOW TO:偵錯 ActiveX 控制項。
(C++):MFC 智慧型裝置 DLL
如需詳細資訊,請參閱 MFC 偵錯技術。
本章節也包含下列主題的相關資訊:
本主題包含下列章節,其中提供有關如何準備偵錯類別庫的注意事項:
建置偵錯版本
混合模式偵錯
變更預設的組態
偵錯 DLL 的方法
呼叫的應用程式
網頁上的控制項
即時運算視窗
建置偵錯版本
無論您如何啟動偵錯,確定要先建置 DLL 的偵錯版本,並且確定該偵錯版本是位於應用程式預期可找到的位置。 這似乎是顯而易見的事情,但是如果您忘記這個步驟,應用程式可能會尋找到 DLL 的其他版本並且載入。 程式將會繼續執行,而您會懷疑為何一直沒遇到中斷點。 您可以在偵錯時開啟偵錯工具的 [模組] 視窗,驗證您的程式載入了哪些 DLL。 [模組] 視窗會列出正在偵錯的處理序中所載入的每個 DLL 或 EXE。 如需詳細資訊,請參閱 HOW TO:使用模組視窗。
若要將偵錯工具附加至以 C++ 撰寫的程式碼,該程式碼必須發出 DebuggableAttribute。 您可以使用 /ASSEMBLYDEBUG 連結器選項連結,將其自動加入程式碼。
混合模式偵錯
呼叫 DLL 的呼叫應用程式可以用 Managed 程式碼或機器碼撰寫。 如果您的 Managed DLL 是由機器碼呼叫,而您要偵錯 Managed 程式碼和機器碼,則 Managed 偵錯工具和原生偵錯工具皆必須啟用。 您可以在 [<專案> 屬性頁] 對話方塊或視窗中選取此項目。 不同的做法是取決於您是由 DLL 專案啟動偵錯,或者由呼叫應用程式專案啟動偵錯。 如需詳細資訊,請參閱 HOW TO:在混合模式偵錯。
變更預設的組態
當您以專案範本建立主控台應用程式專案時,Visual Studio 會自動建立偵錯和發行組態所需要的設定。 若有需要,您可以變更這些設定。 如需詳細資訊,請參閱C++ 偵錯組態的專案設定、C# 偵錯組態的專案設定、Visual Basic 偵錯組態的專案設定和 HOW TO:設定偵錯和發行組態。
偵錯 DLL 的方法
本節中的每一個專案都會建立 DLL。 您無法直接執行 DLL,它必須由應用程式進行呼叫 (通常是 EXE)。 如需詳細資訊,請參閱建立和管理 Visual C++ 專案。 呼叫的應用程式可能符合下列其中一項準則:
一個應用程式,在相同的 Visual Studio 方案中建置於另一個包含該類別庫的專案。
已部署在測試或實際執行電腦上的現有應用程式。
位於 Web 上並且經由 URL 存取。
包含嵌入該 DLL 的網頁之 Web 應用程式。
偵錯呼叫的應用程式
若要偵錯 DLL,請由偵錯呼叫的應用程式開炲,通常是 EXE 或 Web 應用程式。 您可以使用幾種方式進行偵錯。
如果您有呼叫應用程式的專案,就可以開啟該專案,並且從 [偵錯] 功能表啟動執行。 如需詳細資訊,請參閱 HOW TO:開始執行。
如果該呼叫應用程式是已部署在測試或實際執行電腦上的現有程式,而且已經在執行,您可以附加至這個應用程式。 如果該 DLL 是 Internet Explorer 所裝載的控制項,或網頁上的控制項,請使用這個方法。 如需詳細資訊,請參閱 HOW TO:附加至執行中處理序。
您可以從 DLL 專案對呼叫的應用程式進行偵錯。 如需詳細資訊,請參閱 HOW TO:從 DLL 專案偵錯。
您可以從 Visual Studio 的 [即時運算] 視窗予以偵錯。 在這個情況下,[即時運算] 視窗扮演應用程式的角色。
在您啟動偵錯呼叫的應用程式之前,您通常要在類別庫裡設定中斷點。 如需詳細資訊,請參閱中斷點和追蹤點。 遇到中斷點時,您可以逐步執行程式碼,觀察每行的動作,直到您分辨出問題的所在。 如需詳細資訊,請參閱 程式碼逐步執行概觀。
網頁上的控制項
若要偵錯網頁的控制項,請建立嵌入該控制項的 [ASP.NET] 頁面 (如果這樣的頁面不存在)。 然後您可以在這個網頁和控制項程式碼中放置中斷點。 接下來由 Visual Studio 叫用這個網頁。
在呼叫的應用程式啟動偵錯之前,您通常要在 DLL 裡設定中斷點。 遇到中斷點時,您可以逐步執行程式碼,觀察每行的動作,直到您分辨出問題的所在。 如需詳細資訊,請參閱中斷點和追蹤點和程式碼逐步執行概觀。
即時運算視窗
您不需呼叫應用程式,即可評估 DLL 中的函式或方法。 您可以執行設計階段偵錯,並使用 [即時運算] 視窗。 若要使用這種方法偵錯,請在開啟 DLL 專案時進行下列步驟:
開啟偵錯工具 [即時運算] 視窗。
若要在測試 Class1 類別中名為 Test 的方法,請透過在 [即時運算] 視窗中輸入下列 C# 程式碼產生 Class1 類別的物件。 這個 managed 程式碼適用於 Visual Basic 和 C++,加以適當的語法改變:
Class1 obj = new Class1();
在 C# 中,所有名稱都必須是完整名稱。 此外,任何方法或變數都必須位於偵錯工作階段目前的範圍和內容中。
假設 Test 採用了一個 int 參數,使用 [即時運算] 視窗評估 Test:
?obj.Test(10)
結果會列印在 [即時運算] 視窗。
您可以將中斷點放置在 Test 內繼續對其偵錯,然後再次評估該函式:
?obj.Test(10);
這個中斷點會被叫用,而且您可以逐步執行 Test。 當執行離開 Test 之後,偵錯工具會返回設計模式。