VSCode调试C++时launch.json配置cwd为${workspaceFolder}不生效如何解决
问题原因
这是旧版本微软C/C++扩展在macOS环境下对接lldb的已知bug:launch.json中配置的cwd参数没有被正确传递给调试器,lldb会默认使用可执行文件所在的build目录作为工作目录,所以你读取相对路径的文件会失败。
有效解决方案
以下方案按优先级从高到低排列,任选其一即可:
方案1:在launch.json中添加lldb手动切换目录命令
直接在原有launch.json配置的MIMode字段下方添加setupCommands段,手动给lldb发送切换工作目录的指令,修改后完整配置如下:
{ "version": "0.2.0", "configurations": [ { "name": "clang++ - Build and debug src file", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/analyzer.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "lldb", // 新增以下配置段 "setupCommands": [ { "text": "platform shell cd ${workspaceFolder}", "ignoreFailures": false }, { "text": "settings set target.process.working-directory ${workspaceFolder}", "ignoreFailures": false } ], "preLaunchTask": "clang++ build src files for DEBUG" } ] }
修改后重启调试即可生效,可在调试控制台执行-exec shell pwd验证路径是否正确。
方案2:更换调试扩展为CodeLLDB
如果方案1没有生效,可以安装VS Code的CodeLLDB扩展,该扩展对macOS的lldb适配更好,cwd参数可以直接生效。安装后只需把launch.json中的type字段从cppdbg改为lldb即可,其余配置不用修改。
方案3(临时验证用):修改可执行文件读取路径
如果不想修改调试配置,也可以直接把代码里的文件读取路径改为绝对路径拼接,编译时注入工作目录路径或者代码中读取程序位置向上回溯找目标目录即可,不过这种方式灵活性较差,只建议临时排查问题使用。
内容的提问来源于stack exchange,提问作者Yang Zhou
相关产品推荐
相关产品推荐

