GDB - 在单独的窗口中显示目标应用程序的输出

时间:2012-01-22 17:53:26

标签: c gdb

我正在使用GDB来调试我的一些C应用程序。我目前所做的是加载目标应用程序,在第30行设置断点并运行它。

我想让GDB在新的终端窗口中显示我自己的应用程序的输出,而我仍然可以通过GDB终端窗口控制断点处理,但我似乎找不到合适的开关。有没有办法让GDB在自己的窗口中显示我的程序输出?

6 个答案:

答案 0 :(得分:17)

对于想知道如何使用GDB tty命令的人来说,这是一个简短的描述......

  • 打开一个新的控制台窗口。我们将在这里重定向GDB下运行的程序的输出。这是我们的输出窗口。
  • 在输出窗口中运行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。

GNU gdbserver documentation

从窗口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>