簡體   English   中英

Visual Studio 代碼:附加到 Unity 進程以調試基於 C++ 的 dll

[英]Visual Studio Code: Attach to Unity process for debugging C++ based dll

我有一個 Unity 項目,它通過在單獨項目中編譯的 DLL 使用一些 C++ 代碼。 我可以將 Visual Studio 代碼調試器附加到我的 Unity 項目,以便我可以使用斷點調試 DLL 的源代碼嗎?

以下是我到目前為止嘗試過的一些事情:

  • 在 Unity 中:按“暫停”,然后按“開始”在啟動游戲后立即暫停游戲(以便有時間附加 vs 代碼)
  • 使用調試符號編譯 DLL
  • 在VS Code中:像這樣創建一個launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach to process",
            "type":"clr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }]
}

--> 這應該允許我選擇我想以交互方式連接的進程

  • VS Code:單擊“附加到進程”-> 搜索我的項目名稱-> 根據my/path/to/Unity.exe返回一個進程-> 附加似乎有效,但是當我“取消暫停”我的 Unity 游戲時它永遠不會達到斷點。

我的launch.json錯了嗎?

一些附加信息:

  • 我正在使用 bazel 通過命令行編譯我的 c++ 庫項目(不確定是否相關?)
  • 通常在 VS 代碼中調試 C++ 時,我的 launch.json 有一個條目sourceMap ,它將調試器定向到我的源文件的根目錄。 不確定這里是否也需要類似的東西?

向前進
同時我重構了我的launch.json。 感謝評論,我假設"type": "clr"代表公共語言運行時,它似乎用於調試腳本語言而不是 C/C++。 所以我把它改成了"type":"cppdbg" 通過 Msys2 安裝 gdb 后,我在 launch.json 中引用了 gdb 的路徑。 這是我的launch.json的更新版本:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach to process",
            "type":"cppdbg",
            "request": "attach",
            "processId": "${command:pickProcess}",
            "program": "${workspaceRoot}/Packages/com.github.homuler.mediapipe/Runtime/Plugins/mediapipe_c.dll",
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
        }]
}

劇透:它仍然無法正常工作,但在 VS Code 調試控制台/終端中,當我在 Unity 編輯器中啟動游戲時,我看到了一些 output。 因此,至少 VS Code 和 Unity 之間似乎存在一些流量。
一個新問題:

  • 使用第二版啟動。json、C++ 斷點為灰色,並顯示信息消息“正在嘗試綁定斷點......”

雖然我無法找到 VS Code 的解決方案,但我找到了解決方案

  • Microsoft Visual Studio Community 2022 RC(64 位),隨
    • 使用 C++ 進行桌面開發
    • 通用 Windows 平台開發
    • 注意:這不是 Unity 隨附的獨立 VS(即 VS 2019)

解決方案大致是這樣的

  • 使用調試標志編譯 C++ DLL 庫
    • 因為在我的情況下,編譯是使用 bazel 完成的,我什至不能說使用了哪個編譯器,但這似乎並不重要
  • 打開 VS -> 文件打開 -> 選擇包含 C++ 源代碼的文件夾
  • 在 .cc 文件中設置斷點(從 Unity 啟動)
  • 啟動 Unity
  • 在 VS(頂部菜單欄)中單擊 Debug -> Attach to Process
    • 在進程列表中搜索 Unity.exe(應該只有一個條目) 在此處輸入圖像描述
    • 該列表上方是一個選項“附加到:”->選擇->“本機” 在此處輸入圖像描述
  • 在 Unity 編輯器中啟動游戲

--> 游戲現在應該在到達斷點時中斷

VS中的C++ DLL庫項目先編譯調試,還需要添加/Zi參數。

遵循以下步驟:

  1. 打開項目的“屬性頁”對話框。
  2. 單擊 C/C++ 文件夾。
  3. 單擊常規屬性頁。
  4. 修改調試信息格式屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM