我正在使用GDB调试我的一些C应用程序。我目前所做的是加载目标应用程序,在第30行设置一个断点并运行它。GDB - 在单独的窗口中显示目标应用程序的输出
我想让GDB在新的终端窗口中显示我自己的应用程序的输出,同时我仍然能够通过GDB终端窗口控制断点处理,但我似乎无法找到合适的开关。有没有办法让GDB在自己的窗口中显示我的程序的输出?
我正在使用GDB调试我的一些C应用程序。我目前所做的是加载目标应用程序,在第30行设置一个断点并运行它。GDB - 在单独的窗口中显示目标应用程序的输出
我想让GDB在新的终端窗口中显示我自己的应用程序的输出,同时我仍然能够通过GDB终端窗口控制断点处理,但我似乎无法找到合适的开关。有没有办法让GDB在自己的窗口中显示我的程序的输出?
我知道的最好方法是将程序的输出重定向到一个文件,然后tail -f
该文件在另一个终端中。重定向使用run > filename
完成,如GDB documentation中所述。
另一种方法是使用gdbserver启动目标程序(假设它可用)。然后你可以将GDB从一个单独的窗口连接到gdbserver。
从窗口答:
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)
只需使用tty
命令。如果您希望您重定向到/ dev程序的输出/ PTS/5型:
tty /dev/pts/5
这是'tty'命令的新选项吗?在我的Fedora 19系统上,'tty'命令不接受这个参数。 – KyleL
@KdawgUD:你确定吗?该命令适用于我。你能显示错误信息吗? –
在docs [here](https://sourceware.org/gdb/onlinedocs/gdb/Input_002fOutput.html)中有一个例子。 –
对于人们想知道如何在这里使用的GDB TTY命令是一个简短的说明...
在输出窗口中运行tty
命令。这将显示底层控制台使用的tty的名称。
$ tty
/dev/pts/4
打开另一个控制台窗口,并启动GDB这里。我们称之为GDB窗口。
现在使用上面获得的tty文件名在GDB中运行tty命令,然后启动调试过程。
(gdb) tty /dev/pts/4
(gdb) run
现在你应该可以分别看到在输出窗口中的程序输出。
注意:GDB设置新控制台命令在Linux上不起作用!它只能在Windows上运行。在Linux上使用上面描述的tty方法。
随着在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>
非常感谢您的回答。不幸的是,它并不适用于我想要做的事情,但是我通过筛选输出并将其重定向到另一个应用程序(我的项目在Windows上运行并使用MiniGW捆绑包),为我自己的目的设法找到了一种肮脏的替代解决方案。 – beta
祝你好运与ncurses :-) – clearlight