如何在 VSCode 中配置 launch.json 以从新的测试资源管理器视图调试单元 ctest(cmake)?

use*_*920 5 c++ cmake launch ctest visual-studio-code

我有两个 cmake 单元测试来检查 url 和 json 帮助程序类,在我的项目的 CMakeLists.txt 中声明,如下所示:

########################################
# CMakeLists.txt - Tests               #
########################################
add_executable(urltest test/url.cpp)
add_test(NAME URLTest COMMAND urltest)

add_executable(jsontest test/json.cpp)
add_test(NAME JSONTest COMMAND jsontest )
Run Code Online (Sandbox Code Playgroud)

我在 VSCode 的测试视图中直观地获得了测试单元,并且我可以在发布模式下完美运行这两个单元: 在发布模式下执行单元测试

现在,如果我想使用另一个按钮对其进行调试,我必须选择一个启动配置,这需要为每个单元测试手动创建一个启动配置: 在调试模式下执行单元测试

我当前的 launch.json 文件需要为每个单元测试提供一个配置,这是不可能维护的:

########################################
# CMakeLists.txt - Tests               #
########################################
add_executable(urltest test/url.cpp)
add_test(NAME URLTest COMMAND urltest)

add_executable(jsontest test/json.cpp)
add_test(NAME JSONTest COMMAND jsontest )
Run Code Online (Sandbox Code Playgroud)

我猜问题只是属性program,我们如何将VSCode测试视图上单击的程序映射到唯一的启动配置?例如如下所示:

{ // launch.json
    "version": "0.2.0",
    "configurations": [
        {
            "name": "CTest-urltest",
            "type": "lldb",
            "request": "launch",
            "program": "${workspaceFolder}/build/urltest",
            "args": [],
            "initCommands": ["breakpoint set -n main -N entry"],
            "exitCommands": ["breakpoint delete entry"],
            "cwd": "${workspaceFolder}"
        },
        {
            "name": "CTest-jsontest",
            "type": "lldb",
            "request": "launch",
            "program": "${workspaceFolder}/build/jsontest",
            "args": [],
            "initCommands": ["breakpoint set -n main -N entry"],
            "exitCommands": ["breakpoint delete entry"],
            "cwd": "${workspaceFolder}"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

小智 5

现在这已记录在调试测试永久链接)中。

正如建议的那样,优先选择${cmake.testProgram}作为${command:cmake.launchTargetPath}程序因为这允许您在能够调试测试的同时拥有不同的启动目标。

包括"args": [ "${cmake.testArgs}" ]能够运行特定测试。如果没有这个,即使您只选择了一个,所有测试都将被调试。

广东发展银行

{
    "name": "(ctest) Launch",
    "type": "cppdbg",
    "cwd": "${workspaceFolder}",
    "request": "launch",
    "program": "${cmake.testProgram}",
    "args": [ "${cmake.testArgs}" ],
    // other options...
}
Run Code Online (Sandbox Code Playgroud)

MSVC

{
    "name": "(ctest) Launch",
    "type": "cppvsdbg",
    "request": "launch",
    "program": "${cmake.testProgram}",
    "args": [ "${cmake.testArgs}" ],
    // other options...
}
Run Code Online (Sandbox Code Playgroud)