我正在使用 VSCode 来调试我的 GoogleTest 测试套件,并且我有多个变量参数。问题是,当我传递带有空格的参数时,尽管不会产生错误,但不会考虑 arg。
以下是有关我使用的配置的一些信息:
launch.json :
{
"version": "0.2.0",
"configurations": [
{
"name": "TEST",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/tests/out/unit_tests",
"args": [
"--gtest_filter=${input:gtest filter}",
"--gtest_repeat=${input:gtest repeat}",
"${input:gtest opt}"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/tests/out",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
],
"inputs": [
{
"id": "gtest filter",
"description": "Input a filter string for Gtest test",
"default": "*",
"type": "promptString"
},
{
"id": "gtest repeat",
"description": "Input a repeat number for Gtest test",
"default": "1",
"type": "promptString"
},
{
"id": "gtest opt",
"description": "Shuffle and/or break",
"default": "\\\"--gtest_break_on_failure --gtest_shuffle\\\"",
"type": "pickString",
"options": [
"\\\"--gtest_shuffle --gtest_break_on_failure\\\"",
"--gtest_shuffle",
"--gtest_break_on_failure",
"",
]
}
]
}
问题是
${input:gtest opt}
手动执行:
foo@bar:~$ ./unit_tests --gtest_filter=m --gtest_repeat=1 --gtest_shuffle --gtest_break_on_failure
Note: Google Test filter = m
Note: Randomizing tests' orders with a seed of 94802 .
[==========] Running 0 tests from 0 test suites.
[==========] 0 tests from 0 test suites ran. (0 ms total)
[ PASSED ] 0 tests.
从 VSCode 启动:
Note: Google Test filter = m
[==========] Running 0 tests from 0 test suites.
[==========] 0 tests from 0 test suites ran. (0 ms total)
[ PASSED ] 0 tests.
如您所见,
"\\\"--gtest_shuffle --gtest_break_on_failure\\\""
已转义,但未由 GoogleTest 处理。我也尝试过使用简单的引号"'--gtest_shuffle --gtest_break_on_failure'"
但没有成功。
您应该在参数中提供一个字符串而不是数组。例如:
"args": "--gtest_filter=${input:gtest filter} --gtest_repeat=${input:gtest repeat} ${input:gtest opt}",