我正在使用GDB来调试我的一些C应用程序。我目前所做的是加载目标应用程序,在第30行设置断点并运行它。
我想让GDB在新的终端窗口中显示我自己的应用程序的输出,而我仍然可以通过GDB终端窗口控制断点处理,但我似乎找不到合适的开关。有没有办法让GDB在自己的窗口中显示我的程序输出?
答案 0 :(得分:17)
对于想知道如何使用GDB tty命令的人来说,这是一个简短的描述......
在输出窗口中运行tty
命令。这将显示底层控制台使用的tty的名称。
$ tty
/dev/pts/4
打开另一个控制台窗口并在此处启动GDB。我们称之为GDB窗口。
现在使用上面获得的tty文件名在GDB中运行tty命令,然后启动调试过程。
(gdb) tty /dev/pts/4
(gdb) run
现在您应该能够在输出窗口中单独看到程序输出。
注意:GDB set new-console on
命令在Linux上不起作用!它只能在Windows上运行。在Linux上使用上面描述的tty方法。
答案 1 :(得分:15)
您可以使用set new-console on
完成此操作,如here所示。
答案 2 :(得分:7)
另一种方法是使用gdbserver启动目标程序(假设它可用)。然后,您可以在单独的窗口中将GDB连接到gdbserver。
从窗口A:
gdbserver :12345 myprog [args...]
从窗口B:
gdb test
GNU gdb 6.6
...
(gdb) target remote localhost:12345
Remote debugging using localhost:12345
0x009867c0 in ?? ()
(gdb) b main
Breakpoint 1 at 0x804834a: file test.c, line 40.
(gdb) c
Continuing.
Breakpoint 1, main (argc=1, argv=0xffff8904) at test.c:40
40 int i = 1;
(gdb)
答案 3 :(得分:2)
只需使用tty
命令即可。如果您希望将程序的输出重定向到/ dev / pts / 5,请输入:
tty /dev/pts/5
答案 4 :(得分:1)
我知道的最好的方法是将程序的输出重定向到一个文件,然后将tail -f
该文件重定向到另一个终端。使用run > filename
完成重定向,如GDB documentation。
答案 5 :(得分:1)
在Mac上使用lldb时,以下命令在新的终端窗口中运行程序,而调试器在原始窗口中进行控制:
$ lldb <prog>
(lldb) b main # if you want to set a breakpoint
(lldb) process launch --tty -- <args>
这将程序作为指定的进程运行 tty(终端窗口):
$ tty # (in other window, get tty name)
/dev/ttys002
$ lldb
(lldb) b main # if you want to set a breakpoint
(lldb) process launch --tty=/dev/ttys002 -- <args>