【发布时间】:2014-08-10 15:50:15
【问题描述】:
在 Linux 中,GDB 不允许使用 set new-console on,而是使用名为 tty 的东西。与
set inferior-tty /dev/pts/[number of an active console],
在 .gdbinit 文件中(每次都需要编辑数字)它重定向 std::cout,但 std::cin 无法正常工作。它只是将我的输入解释为好像我正在发送 bash 命令并报告错误,并且我的程序继续等待输入。在那之后我不能再在控制台中输入,所以我假设std::cin 正在被重定向,但不能正常工作。
我尝试查找如何从应用程序本身启动终端。我只能找到this answer,其中还提到了一个错误,它不会重定向输入。
有没有办法解决这个问题,并在调试时将std::cin(和std::cout)正确重定向到 Linux 终端?
背景信息:我想做的事情应该很简单。在使用 std::cin 之前,在用户输入前打印 >。我有简单的代码打印>,刷新cout,然后调用getline()。它在正常运行程序时起作用。但遗憾的是,当没有换行符时,GDB 拒绝刷新流,因此它不打印 >,忽略用户输入的第一个字符,然后 确实 打印 @987654336 @,紧随其后的是我的程序由于输入字符串残缺而发送的错误消息。
在 Windows 中,我通过使用 set new-console on 创建一个 .gdbinit 文件解决了这个问题。这会导致 GDB 使用 Windows 控制台而不是它自己的控制台,并且按预期工作。
【问题讨论】:
标签: c++ linux terminal gdb cin