Visual Studio 可讓您在偵錯會話中啟用多個調試程序類型,這稱為混合模式偵錯。 在本教學課程中,您將學習如何在單一偵錯會話中偵錯受控程式碼和原生程式碼。
本教學課程示範如何從受控應用程式對原生程式碼進行偵錯,但您也可以從原生應用程式偵錯受控程式碼。 調試程式也支援其他類型的混合模式偵錯,例如偵錯 Python 和原生代碼,以及在應用程式類型,例如 ASP.NET 中使用腳本偵錯程式。
在本教學課程中,您將:
- 建立簡單的原生 DLL
- 建立簡單的 .NET Core 或 .NET Framework 應用程式以呼叫 DLL
- 設定混合模式偵錯
- 啟動調試程式
- 在受控應用中觸發斷點
- 進入原生碼
先決條件
您必須已安裝 Visual Studio,且具有下列工作負載:
- 使用 C++ 進行桌面開發
- .NET 桌面開發
您必須已安裝 Visual Studio,且具有下列工作負載:
- 使用 C++ 進行桌面開發
- .NET 桌面開發 或 .NET Core 跨平台開發,視您想要建立的應用程式類型而定。
如果您沒有 Visual Studio,請移至 Visual Studio 下載 頁面免費安裝。
如果您已安裝 Visual Studio,但沒有所需的工作負載,請在 Visual Studio [新增專案] 對話框的左窗格中選取 [開啟 Visual Studio 安裝程式]。 在 Visual Studio 安裝程式中,選取您需要的工作負載,然後選取 [[修改]。
建立簡單的原生 DLL
若要為 DLL 專案建立檔案:
開啟 Visual Studio 並建立專案。
按 Esc 關閉開始視窗。 輸入 Ctrl + Q 來開啟搜尋方塊,輸入 空白專案,然後選取適用於 C++ 的 空白專案。 在出現的 [ 設定新專案 ] 對話框中,輸入類似 Mixed_Mode_Debugging 的名稱,然後按兩下 [ 建立]。
按 Esc 關閉開始視窗。 輸入 Ctrl + Q 以開啟搜尋方塊,輸入 [空白專案 ],選擇 [範本],然後選擇 [空白專案] C++。 在出現的對話框中,選擇 建立。 請輸入類似 Mixed_Mode_Debugging 的名稱,然後按一下 建立。
如果您沒有看到 空白專案 項目範本,請移至 [工具]>[取得工具和功能...],這會開啟 Visual Studio 安裝程式。 Visual Studio 安裝程式隨即啟動。 選擇 "C++ 桌面開發" 的 工作負載,然後選擇 修改。
Visual Studio 會建立專案。
在 [方案總管]中,選取 [來源檔案 ],然後選取 [專案]>[新增專案]。 或者,以滑鼠右鍵按一下 [來源檔案],然後選取 [新增專案]>。
如果您沒有看到所有項目樣本,請選擇 [顯示所有範本。
在 [新增專案] 對話框中,選取 [C++檔案.cpp]。 在 [名稱] 字段中輸入 Mixed_Mode.cpp,然後選取 [新增]。
Visual Studio 會將新的C++檔案新增至 [方案總管] 。
將下列程式代碼複製到 Mixed_Mode.cpp:
#include "Mixed_Mode.h"在 [方案總管]中,選取 [頭檔],然後選取 [專案]>[新增專案]。 或者,以滑鼠右鍵按下 標頭檔案,然後選取 新增>新增項目。
如果您沒有看到所有項目樣本,請選擇 [顯示所有範本。
在 [新增專案] 對話框中,選取 [標頭檔案 (.h)]。 在 [名稱] 欄位中輸入 Mixed_Mode.h,然後選擇 [新增]。
Visual Studio 會將新的頭檔新增到 [方案總管] 。
將下列程式代碼複製到 Mixed_Mode.h:
#ifndef MIXED_MODE_MULTIPLY_HPP #define MIXED_MODE_MULTIPLY_HPP extern "C" { __declspec(dllexport) int __stdcall mixed_mode_multiply(int a, int b) { return a * b; } } #endif選擇 檔案>[全部儲存],或按 Ctrl+Shift+S 來儲存檔案。
若要設定及建置 DLL 專案:
在 Visual Studio 工具列中,選取 [偵錯 組態和 x86 或 x64 平臺]。 如果您的呼叫應用程式是 .NET Core,一律以 64 位模式執行,請選取 [x64 作為平臺。
在 [方案總管]中,選取 Mixed_Mode_Debugging 專案節點,然後選取 [屬性] 圖示,或以滑鼠右鍵按一下專案節點,然後選取 [屬性]。
在 [屬性] 窗格頂端,確定 [組態] 已設定為 [Active(Debug),而 [平臺] 與工具欄中所設定的內容相同:x64,或 x86 平臺的 Win32。
重要
如果您將平臺從 x86 切換至 x64,則您必須重新設定新平台的屬性。
在左窗格中的 [組態屬性] 下,選取 [連結器]>[進階],然後在 [沒有進入點] 旁的下拉式清單中,選取 [無]。 如果您必須將它變更為 [無],請選取 [套用]。
在 [組態屬性]下,選取 [一般],然後在 [組態類型]旁的下拉式清單中,選取 [動態連結庫][.dll]。 選取 套用,然後選取 確定。
在 [方案總管] 中選取專案,然後選取 [建置>建置方案]、按 F7,或以滑鼠右鍵單擊專案,然後選取 [建置]。
項目應該能夠順利建置且不出錯誤。
建立簡單的受控應用程式以呼叫 DLL
開啟 Visual Studio 並建立新的專案。
按 Esc 關閉開始視窗。 輸入 Ctrl + Q 以開啟搜尋方塊,輸入 控制台,然後選取適用於 .NET 或 .NET Framework 的 C# 控制台應用程式 。
按 Esc 關閉開始視窗。 輸入 Ctrl + Q 以開啟搜尋方塊、輸入 控制台、選擇 [範本],然後選擇 [適用於 .NET Core 的控制台應用程式] 或 [控制台應用程式] for C# 。 在出現的對話框中,選擇 [下一步] 。
然後,輸入名稱,例如 [Mixed_Mode_Calling_App],然後點擊 [下一步] 或 [建立],選擇任何可用的選項。
針對 .NET Core 或 .NET 5+,選擇建議的目標 Framework 或 .NET 8,然後選擇 [ 建立]。
如果您沒有看到正確的項目範本,請移至 Tools>Get Tools and Features...,這會開啟 Visual Studio 安裝程式。 選擇在先決條件中描述的正確.NET工作負載,然後選擇 [修改]。
注意
您也可以將新的受控專案新增至現有的C++方案。 我們正以新的解決方案建立專案,讓混合模式偵錯工作更加困難。
Visual Studio 會建立空的專案,並將其顯示在 [方案總管] 中。
將 Program.cs 中的所有程式代碼替換為以下程式代碼:
using System; using System.Runtime.InteropServices; namespace Mixed_Mode_Calling_App { public class Program { // Replace the file path shown here with the // file path on your computer. For .NET Core, the typical (default) path // for a 64-bit DLL might look like this: // C:\Users\username\source\repos\Mixed_Mode_Debugging\x64\Debug\Mixed_Mode_Debugging.dll // Here, we show a typical path for a DLL targeting the **x86** option. [DllImport(@"C:\Users\username\source\repos\Mixed_Mode_Debugging\Debug\Mixed_Mode_Debugging.dll", EntryPoint = "mixed_mode_multiply", CallingConvention = CallingConvention.StdCall)] public static extern int Multiply(int x, int y); public static void Main(string[] args) { int result = Multiply(7, 7); Console.WriteLine("The answer is {0}", result); Console.ReadKey(); } } }在新的程式代碼中,將
[DllImport]中的檔案路徑取代為您剛建立之 Mixed_Mode_Debugging.dll 的檔案路徑。 如需提示,請參閱程式代碼批注。 請務必取代 用戶名稱 佔位符號。選取 [檔案]>[儲存 Program.cs],或按 Ctrl+S 儲存檔案。
設定混合模式偵錯
在 [方案總管]中,選取 Mixed_Mode_Calling_App 項目節點,然後選取 [屬性] 圖示,或以滑鼠右鍵按一下項目節點,然後選取 [屬性]。
在屬性中啟用原生程式碼偵錯。
.NET 程式代碼
選取左窗格中的 [偵錯],選取 [開啟偵錯啟動配置檔 UI],然後 選取 [啟用原生程式代碼偵錯] 複選框,然後關閉屬性頁面以儲存變更。
.NET Framework 程式代碼
在左側選單中,選取 [偵錯]。 然後,在 [調試程式引擎] 區段中,選取 [啟用原生程式代碼偵錯 屬性],然後關閉屬性頁面以儲存變更。
選取左窗格中的 [偵錯],選取 [啟用原生程式碼偵錯] 複選框,然後關閉 [屬性] 頁面以儲存變更。
如果您是從 .NET Framework 應用程式將 x64 DLL 設為目標,請將平台目標從 Any CPU 變更為 x64。 若要這樣做,您可能需要從 [偵錯] 工具列的 [解決方案平臺] 下拉式清單中選取 [Configuration Manager]。 然後,如果您無法直接切換至 x64,請建立以 x64 為目標的新 組態。
設定斷點並開始偵錯
在 C# 專案中,開啟 Program.cs。 在下列程式代碼行上設定斷點,方法是單擊最左邊的邊界以選取該行,然後按 F9,或者以滑鼠右鍵單擊該行,然後選擇 [斷點]>[插入斷點]。
int result = Multiply(7, 7);紅色圓圈會出現在您設定斷點的左邊界。
按 F5、選取 Visual Studio 工具列中的綠色箭號,或選取 [偵錯]>[開始偵錯] 以開始偵錯。
調試程式會在您設定的斷點上暫停。 黃色箭號表示調試程式目前暫停的位置。
進入和離開原生程式碼
在管理的應用程式中暫停偵錯時,請按 F11,或選取 [偵錯]>[逐步執行]。
Mixed_Mode.h 原生頭文件隨即開啟,您會看到調試程序暫停所在的黃色箭號。
現在,您可以設置和觸發斷點,並在原生或受控程式碼中檢查變數。
將滑鼠停留在原始程式碼中的變數上方,以查看其值。
在 [自動變數] 和 [局部變數] 視窗中查看變數及其值。
在調試程式中暫停時,您也可以使用 [監視] 視窗和 [呼叫堆疊] 視窗。
再次按 F11,將調試程式往前推進一行。
按 Shift+F11,或選取 [偵錯]>[跳出],來在管理應用程式中繼續執行並再次暫停。
按 F5 或選取綠色箭號以繼續偵錯應用程式。
祝賀! 您已完成混合模式偵錯的教學課程。
下一步
在本教學課程中,您已瞭解如何啟用混合模式偵錯,以從受控應用程式中偵錯原生程式碼。 如需其他調試程式功能的概觀,請參閱: