macOS下VS Code调试依赖标准输入的C++程序时出现挂起无法输入问题
我之前也踩过这个一模一样的坑!在macOS上用VS Code调试需要用户输入的C++程序时,一到等待标准输入的地方,调试工具栏直接变灰,左边的变量面板也消失,完全没法输入内容,真的太影响调试效率了。结合自己的解决经验,给你几个实用的方案:
调整launch.json的控制台配置
默认的调试控制台(internalConsole)是不支持标准输入交互的,这才导致程序挂起无法输入。你需要把控制台类型改成支持交互的选项:
打开.vscode/launch.json,找到console字段,把它改成"integratedTerminal"(用VS Code自带的终端)或者"externalTerminal"(弹出系统自带的终端)。修改后的配置片段大概是这样:{ "version": "0.2.0", "configurations": [ { "name": "C/C++: clang++ 生成和调试活动文件", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "console": "integratedTerminal", "MIMode": "lldb", "preLaunchTask": "C/C++: clang++ 生成活动文件" } ] }亲测这一步是解决问题的核心!
确保task.json编译时生成调试信息
如果编译程序的时候没加调试符号,调试过程也可能出现各种异常。打开.vscode/task.json,检查编译命令的args里有没有-g参数,这个参数是用来生成带调试符号的可执行文件的。比如正确的编译参数片段:"args": [ "-fcolor-diagnostics", "-fansi-escape-codes", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ]重启VS Code和调试会话
修改配置后有时候需要重启VS Code才能让新配置生效,或者先终止当前卡住的调试会话,重新启动调试试试,避免旧的配置缓存搞事情。检查扩展版本是否最新
老版本的C/C++扩展或者LLDB扩展可能存在兼容性问题,打开VS Code的扩展面板,检查这两个扩展有没有更新,及时升级到最新版本。
另外还有个小细节:如果选了integratedTerminal,调试到需要输入的地方时,记得点击一下VS Code底部的终端窗口激活它,不然可能输入没反应;如果用externalTerminal,弹出的系统终端窗口别最小化,不然也会没法输入。
内容来源于stack exchange

