Dmi*_*nko 7 c gdb input ncurses
我正在尝试使用gdb调试我的ncurses应用程序.我使用tty命令将程序的I/O重定向到另一个终端.输出就像一个魅力,但我输入有问题.我正在使用getch()函数来检索我的应用程序中的符号.所以,例如,如果我在我的gdb会话中:
tty /dev/pts/5
Run Code Online (Sandbox Code Playgroud)
我在终端窗口(gnome-terminal)的另一个标签中输出了我的输出.我的gdb会话卡住了,等待输入,但是当我按下/ dev/pts/5中的任何键时,我打印出来,但应用程序本身不会将其作为输入符号.当没有gdb运行时一切正常,我也使用noecho(),因此不应显示符号.所以有什么问题?有可能以某种方式处理来自重定向终端的输入吗?
jxh*_*jxh 12
您可以附加到您的进程以从不同的终端进行调试,而不是尝试从内部运行应用程序gdb.
正常运行您的流程.当它被阻止用户输入时,找到它的进程ID,然后gdb从另一个窗口附加到它:
gdb -p <PID>
Run Code Online (Sandbox Code Playgroud)
您的问题是由于程序仍然希望其交互式输入来自您的gdb会话.
小智 7
也许回答有点晚了,但希望这会有所帮助:我花了一些时间来弄清楚如何调试 ncurses 应用程序,最后我在gdbserver和tmux的帮助下做出了一个非常舒适的方法。
这样 gdb 的 I/O 和应用程序就完全分离了:
debug.sh(开始调试的脚本):
#!/bin/bash
tmux splitw -h -p 50 "gdbserver :12345 ./yourapplication"
tmux selectp -t 0
gdb -x debug.gdb
Run Code Online (Sandbox Code Playgroud)
debug.gdb(单行 gdb 脚本文件):
target remote localhost:12345
Run Code Online (Sandbox Code Playgroud)
所以这样,应用程序在右侧启动,gdb 在左侧等待点击继续或任何其他常见的 gdb 内容:)
退出后,tmux 会自动关闭 gdbserver(因此也是右侧面板),仅此而已:)
| 归档时间: |
|
| 查看次数: |
5029 次 |
| 最近记录: |