Visual Studio Community 2017中launch.vs.json参数含空格的调试问题
解决Visual Studio 2017 CMake项目中
launch.vs.json带空格启动参数的问题 我之前在VS2017的CMake项目里也踩过一模一样的坑!明明想传两个带空格的参数,结果程序硬生生拆成了四个,折腾好一阵才搞明白问题出在哪。
核心问题是**launch.vs.json里的args数组需要把每个带空格的参数单独作为一个字符串元素**,而不是把空格分隔的内容拆成多个元素,也不是把所有参数塞进一个字符串里。
正确的配置示例
直接看正确写法,你可以照着修改你的launch.vs.json:
{ "version": "0.2.1", "defaults": {}, "configurations": [ { "type": "default", "project": "CMakeLists.txt", "projectTarget": "你的目标可执行文件.exe", "name": "Debug 启动配置", "args": [ "FIRST ARGUMENT", "SECOND ARGUMENT" ] } ] }
这里的关键是:
- 每个带空格的参数是
args数组的独立元素 - 元素本身是一个完整的字符串(JSON的双引号会确保这个字符串被作为单个参数传递给程序)
常见错误写法(避坑)
你之前遇到的问题大概率是用了下面这些错误写法:
- 把带空格的参数拆成多个数组元素
"args": ["FIRST", "ARGUMENT", "SECOND", "ARGUMENT"]
这种写法会让程序把每个单词都当成独立参数,自然就收到4个参数了。
- 把所有参数塞进一个数组元素
"args": ["FIRST ARGUMENT SECOND ARGUMENT"]
这种情况程序只会收到1个参数,内容是两个短语连在一起,也不符合你的需求。
额外提示:参数包含双引号的情况
如果你的参数里本身需要包含双引号,记得在JSON里用反斜杠转义,比如:
"args": [ "He said \"Hello World\"", "Another argument" ]
这样配置后,重启一下VS的调试会话,你的程序应该就能正确接收到两个带空格的参数了!
内容的提问来源于stack exchange,提问作者Jeffball




