在进程启动时自动连接 vs code c++ 调试器

Auto connection of vs code c++ debugger on process startup

我对将 godot 作为游戏引擎以及使用 c++ 在其中进行开发的可能性非常感兴趣。我已经停止使用 gdnative 方法,因为它更快更容易(并且还让我有可能使用 CMake 而不是 SCons)。我已经安排了基于 gdnative_cpp_example 的小项目,唯一的区别是我使用了 Cmake 而不是 Scons(很高兴 godot-cpp,它用于生成绑定,SConstruct 中有 CMakeLists 脚本)。我留下的唯一问题是缺少调试 C++ 和 gdscript 代码的好方法。对于开发,我使用 vs 代码(在 windows 上),现在我找到了 3 种调试方法:

  1. 我可以直接从 vs 代码启动项目,稍微修改“启动”配置,以使用 --project 参数启动 godot 编辑器。这提供了调试 c++ 的能力,但不能调试 gdscript。
  2. 有了 vs code 的 godot-tools 扩展,我可以使用 last 来调试 gdscript,但不能使用 c++..
  3. 我可以从编辑器启动项目(这将使我能够调试 gdscript),然后将 vs 代码调试器附加到 运行 进程以调试 c++ dll。这可行,但我需要在启动此过程后通过选择正确的过程直接附加 vs 代码。因此我错过了初始化时间,而且感觉很笨重..

最终我想在 vs code 中同时调试 gdscript 和 c++ dll,但我不确定这是否可能..所以好的是能够从编辑器启动游戏进程并自动将 vs code 连接到它。我试图搜索类似“vs code automatic c++ debug”之类的东西,但我没有在网上找到任何东西。也许我只是在寻找不正确的术语。有人知道这个话题吗?

(我尽量让我的问题简短,但我不确定我是否提供了足够的信息,所以请随时提问)

如果你是来这里启动自动调试器的,那么也许 tenfour 对这个问题的评论可以帮助你,但是因为这个问题的主要原因有点不同(找到用 c++ 和 gdscript 调试 godot 项目的方法同时),我找到了不同的解决方案,所以如果有人出于同样的原因来到这里,这里是我想出的。首先你需要在 vscode 中正确设置 c++ 项目,它将从 godot-cpp 项目和你的个人代码编译你的 gdnative dll(我建议使用 CMake 来完成所有这些,正如我所说 godot-cpp可以与 CMake 一起工作)。第二:您的 vscode 需要 godot-tools 插件。一切正常后,dll 正在编译并且 godot 项目正在使用它,您需要设置下一个启动配置:

{
    // this must be in .vscode/launch.json
    "version": "0.2.0",
    "configurations": [
        {
            "name":"godot-gdscript-attach",
            "type": "godot",
            "request": "launch",
            "project": "${workspaceFolder}/project/",
            "port": 6007,
            "address": "127.0.0.1",
            "launch_game_instance": false,
            "launch_scene": false
        },
        {
            "name": "godot-cpp-launch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${config:godot_tools.editor_path}",
            "args": [
                "--debug",
                "--remote-debug", 
                "127.0.0.1:6007",
                "--path", 
                "\"${workspaceFolder}/project/\""
            ],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/project/",
            "environment": [],
            "externalConsole": true
        }
    ],
    "compounds": [
        {
            "name": "godot-launch",
            "configurations": [
                "godot-gdscript-attach",
                "godot-cpp-launch"
            ]
        }
    ]
}
  • godot-gdscript-attach 启动后将等待 godot 游戏作为调试目标连接到 ip/port = 127.0.0.1:6007(即使您启动此配置也能正常工作,然后启动游戏来自编辑)。
  • godot-cpp-launch 将启动您的游戏作为 cppvsdbg 的调试目标(据我了解这是 vs 调试器)。关于这个的更多信息:
    • "program": "${config:godot_tools.editor_path}" <- 这是调试程序必须 运行。我在这里使用 config:godot_tools.editor_path 作为路径,因为它是为 godot-tools 设置的选项。没什么特别的,只是方便,所以我现在可以同时更改 godot-tools 和我的调试配置的 godot 路径。
    • argument "127.0.0.1:6007" <- 这是 ip 和端口,godot 将查看开始连接以进行 gdscript 调试的 ip 和端口。您可以看到为“地址”/“端口”写入了相同的值
    • --path ${workspaceFolder}/project/ <- 这是项目文件夹。我的项目放在我的 vscode 项目中的“项目”文件夹中,如果您的项目在不同的文件夹中,请在此处进行配置。

之后你可以 运行 godot-launch 作为 vs 代码中的配置。这将启动您的项目并将您的两个调试器(c++ 调试器和 gdscript 调试器)连接到它。两种类型的断点都有效。