2012-01-22 29 views
9

我正在使用GDB调试我的一些C应用程序。我目前所做的是加载目标应用程序,在第30行设置一个断点并运行它。GDB - 在单独的窗口中显示目标应用程序的输出

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

回答

0

我知道的最好方法是将程序的输出重定向到一个文件,然后tail -f该文件在另一个终端中。重定向使用run > filename完成,如GDB documentation中所述。

+0

非常感谢您的回答。不幸的是,它并不适用于我想要做的事情,但是我通过筛选输出并将其重定向到另一个应用程序(我的项目在Windows上运行并使用MiniGW捆绑包),为我自己的目的设法找到了一种肮脏的替代解决方案。 – beta

+0

祝你好运与ncurses :-) – clearlight

12

您可以使用set new-console on来完成此操作,如here所示。

+0

噢,非常感谢,这正是我正在寻找。当我再次开始使用GDB时,我一定会记住您的答案! – beta

+0

这个答案刚刚救了我的生命。我不知道为什么我以前无法找到这个设置。谢谢你一群人 –

+0

@Herr_Doktor很高兴帮助:) gnu样式文档不倾向于以一种容易找到的方式摆在自己的位置,所以你可能会错过它是可以理解的。 – greatwolf

6

另一种方法是使用gdbserver启动目标程序(假设它可用)。然后你可以将GDB从一个单独的窗口连接到gdbserver。

GNU gdbserver documentation

从窗口答:

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) 
+0

看起来像一个很好的解决方案,非常感谢张贴它。我以前从未使用过gdbserver。 – beta

+0

您可能想要绑定到“127.0.0.1:12345”。 – ysdx

1

只需使用tty命令。如果您希望您重定向到/ dev程序的输出/ PTS/5型:

tty /dev/pts/5 
+0

这是'tty'命令的新选项吗?在我的Fedora 19系统上,'tty'命令不接受这个参数。 – KyleL

+0

@KdawgUD:你确定吗?该命令适用于我。你能显示错误信息吗? –

+1

在docs [here](https://sourceware.org/gdb/onlinedocs/gdb/Input_002fOutput.html)中有一个例子。 –

5

对于人们想知道如何在这里使用的GDB TTY命令是一个简短的说明...

  • 打开新的控制台窗口。我们将在这里重定向从GDB下运行的程序的输出。这是我们的输出窗口。
  • 在输出窗口中运行tty命令。这将显示底层控制台使用的tty的名称。

    $ tty
    /dev/pts/4

  • 打开另一个控制台窗口,并启动GDB这里。我们称之为GDB窗口。

  • 现在使用上面获得的tty文件名在GDB中运行tty命令,然后启动调试过程。

    (gdb) tty /dev/pts/4
    (gdb) run

现在你应该可以分别看到在输出窗口中的程序输出。

注意:GDB设置新控制台命令在Linux上不起作用!它只能在Windows上运行。在Linux上使用上面描述的tty方法。

0

随着在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> 
相关问题