共用方式為


教學:在相同的偵錯會話中偵錯 C# 和 C++

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 專案建立檔案:

  1. 開啟 Visual Studio 並建立專案。

    Esc 關閉開始視窗。 輸入 Ctrl + Q 來開啟搜尋方塊,輸入 空白專案,然後選取適用於 C++ 的 空白專案。 在出現的 [ 設定新專案 ] 對話框中,輸入類似 Mixed_Mode_Debugging 的名稱,然後按兩下 [ 建立]。

    Esc 關閉開始視窗。 輸入 Ctrl + Q 以開啟搜尋方塊,輸入 [空白專案 ],選擇 [範本],然後選擇 [空白專案] C++。 在出現的對話框中,選擇 建立。 請輸入類似 Mixed_Mode_Debugging 的名稱,然後按一下 建立

    如果您沒有看到 空白專案 項目範本,請移至 [工具]>[取得工具和功能...],這會開啟 Visual Studio 安裝程式。 Visual Studio 安裝程式隨即啟動。 選擇 "C++ 桌面開發" 的 工作負載,然後選擇 修改

    Visual Studio 會建立專案。

  2. [方案總管]中,選取 [來源檔案 ],然後選取 [專案]>[新增專案]。 或者,以滑鼠右鍵按一下 [來源檔案],然後選取 [新增專案]>

    如果您沒有看到所有項目樣本,請選擇 [顯示所有範本

  3. 在 [新增專案] 對話框中,選取 [C++檔案.cpp]。 在 [名稱] 字段中輸入 Mixed_Mode.cpp,然後選取 [新增]。

    Visual Studio 會將新的C++檔案新增至 [方案總管]

  4. 將下列程式代碼複製到 Mixed_Mode.cpp

    #include "Mixed_Mode.h"
    
  5. [方案總管]中,選取 [頭檔],然後選取 [專案]>[新增專案]。 或者,以滑鼠右鍵按下 標頭檔案,然後選取 新增>新增項目

    如果您沒有看到所有項目樣本,請選擇 [顯示所有範本

  6. 在 [新增專案] 對話框中,選取 [標頭檔案 (.h)]。 在 [名稱] 欄位中輸入 Mixed_Mode.h,然後選擇 [新增]。

    Visual Studio 會將新的頭檔新增到 [方案總管]

  7. 將下列程式代碼複製到 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
    
  8. 選擇 檔案>[全部儲存],或按 Ctrl+Shift+S 來儲存檔案。

若要設定及建置 DLL 專案:

  1. 在 Visual Studio 工具列中,選取 [偵錯 組態和 x86x64 平臺]。 如果您的呼叫應用程式是 .NET Core,一律以 64 位模式執行,請選取 [x64 作為平臺。

  2. [方案總管]中,選取 Mixed_Mode_Debugging 專案節點,然後選取 [屬性] 圖示,或以滑鼠右鍵按一下專案節點,然後選取 [屬性]

  3. 在 [屬性] 窗格頂端,確定 [組態] 已設定為 [Active(Debug),而 [平臺] 與工具欄中所設定的內容相同:x64,或 x86 平臺的 Win32

    重要

    如果您將平臺從 x86 切換至 x64,則您必須重新設定新平台的屬性。

  4. 在左窗格中的 [組態屬性] 下,選取 [連結器]>[進階],然後在 [沒有進入點] 旁的下拉式清單中,選取 [無]。 如果您必須將它變更為 [無],請選取 [套用]。

  5. 在 [組態屬性]下,選取 [一般],然後在 [組態類型]旁的下拉式清單中,選取 [動態連結庫][.dll]。 選取 套用,然後選取 確定

    切換至原生 DLL

  6. [方案總管] 中選取專案,然後選取 [建置>建置方案]、按 F7,或以滑鼠右鍵單擊專案,然後選取 [建置]。

    項目應該能夠順利建置且不出錯誤。

建立簡單的受控應用程式以呼叫 DLL

  1. 開啟 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 會建立空的專案,並將其顯示在 [方案總管] 中。

  2. 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();
            }
        }
    }
    
  3. 在新的程式代碼中,將 [DllImport] 中的檔案路徑取代為您剛建立之 Mixed_Mode_Debugging.dll 的檔案路徑。 如需提示,請參閱程式代碼批注。 請務必取代 用戶名稱 佔位符號。

  4. 選取 [檔案]>[儲存 Program.cs],或按 Ctrl+S 儲存檔案。

設定混合模式偵錯

  1. [方案總管]中,選取 Mixed_Mode_Calling_App 項目節點,然後選取 [屬性] 圖示,或以滑鼠右鍵按一下項目節點,然後選取 [屬性]

  2. 在屬性中啟用原生程式碼偵錯。

    .NET 程式代碼

    選取左窗格中的 [偵錯],選取 [開啟偵錯啟動配置檔 UI],然後 選取 [啟用原生程式代碼偵錯] 複選框,然後關閉屬性頁面以儲存變更。

    啟用混合模式偵錯

    .NET Framework 程式代碼

    在左側選單中,選取 [偵錯]。 然後,在 [調試程式引擎] 區段中,選取 [啟用原生程式代碼偵錯 屬性],然後關閉屬性頁面以儲存變更。

    選取左窗格中的 [偵錯],選取 [啟用原生程式碼偵錯] 複選框,然後關閉 [屬性] 頁面以儲存變更。

    啟用混合模式偵錯

  3. 如果您是從 .NET Framework 應用程式將 x64 DLL 設為目標,請將平台目標從 Any CPU 變更為 x64。 若要這樣做,您可能需要從 [偵錯] 工具列的 [解決方案平臺] 下拉式清單中選取 [Configuration Manager]。 然後,如果您無法直接切換至 x64,請建立以 x64 為目標的新 組態

設定斷點並開始偵錯

  1. 在 C# 專案中,開啟 Program.cs。 在下列程式代碼行上設定斷點,方法是單擊最左邊的邊界以選取該行,然後按 F9,或者以滑鼠右鍵單擊該行,然後選擇 [斷點]>[插入斷點]

    int result = Multiply(7, 7);
    

    紅色圓圈會出現在您設定斷點的左邊界。

  2. F5、選取 Visual Studio 工具列中的綠色箭號,或選取 [偵錯]>[開始偵錯] 以開始偵錯。

    調試程式會在您設定的斷點上暫停。 黃色箭號表示調試程式目前暫停的位置。

進入和離開原生程式碼

  1. 在管理的應用程式中暫停偵錯時,請按 F11,或選取 [偵錯]>[逐步執行]

    Mixed_Mode.h 原生頭文件隨即開啟,您會看到調試程序暫停所在的黃色箭號。

    進入原生程式碼

    進入原生程式碼

  2. 現在,您可以設置和觸發斷點,並在原生或受控程式碼中檢查變數。

    • 將滑鼠停留在原始程式碼中的變數上方,以查看其值。

    • 在 [自動變數][局部變數] 視窗中查看變數及其值。

    • 在調試程式中暫停時,您也可以使用 [監視] 視窗和 [呼叫堆疊] 視窗。

  3. 再次按 F11,將調試程式往前推進一行。

  4. Shift+F11,或選取 [偵錯]>[跳出],來在管理應用程式中繼續執行並再次暫停。

  5. F5 或選取綠色箭號以繼續偵錯應用程式。

祝賀! 您已完成混合模式偵錯的教學課程。

下一步

在本教學課程中,您已瞭解如何啟用混合模式偵錯,以從受控應用程式中偵錯原生程式碼。 如需其他調試程式功能的概觀,請參閱: