LLDB调试时std::cin无法输入的问题求助及原因咨询
LLDB调试时程序无法接收输入的解决办法与原因分析
问题复现
测试代码:
#include <iostream> int main(){ int a,b; std::cin >> a >> b; std::cout << a+b; }
使用GDB执行run命令后,能正常在终端输入数据;但用LLDB执行run时,会弹出独立的程序运行窗口,此时窗口处于等待输入状态,但无法输入内容。只有在LLDB的后台窗口输入任意内容(非命令也可),再切回程序窗口,才能正常输入。
解决方案
方案1:关闭新终端窗口启动(推荐)
修改LLDB配置,让程序直接在LLDB所在的终端运行,不弹出新窗口:
- 启动LLDB时直接指定配置:
lldb -o "settings set target.launch.new-terminal false" ./your_executable_name - 或者进入LLDB交互界面后先执行配置命令,再启动程序:
(lldb) settings set target.launch.new-terminal false (lldb) run
这样程序的输入输出和LLDB共用同一个终端,不会出现焦点分离问题。
方案2:临时触发焦点同步(应急用)
如果需要保留新窗口运行程序,执行run后:
- 切换到LLDB的后台窗口,按一次回车(无需输入任何命令)
- 切回程序运行窗口,即可正常输入数据
原因分析
LLDB默认配置下,启动目标程序时会创建独立的终端窗口承载程序运行,但这个新窗口的标准输入流没有正确获取输入焦点——此时输入控制权仍在LLDB的主窗口。当你在LLDB主窗口输入任意内容时,会触发终端的焦点重新绑定,程序窗口的标准输入才会正确连接到用户输入设备。
而GDB默认采用同终端运行程序的方式,输入输出流直接绑定到当前终端,不存在焦点分离的问题,所以可以正常输入。
内容的提问来源于stack exchange,提问作者GavinCQTD
相关产品推荐
相关产品推荐

