Gdb打印到文件而不是stdout


104

我正在运行gdb,想检查那些不幸的上帝对象之一。要查看整个过程,它需要很多页面(并且我有一个24英寸的显示器侧身!)。为了易于使用,我希望gdb将对象打印到文件而不是屏幕上,以便我可以在其中打开它。 vi并轻松地移动。鉴于所有gdb的多功能性,一定有一种方法可以做到,对吗?

Answers:


151

您需要启用日志记录。

(gdb) set logging on

您可以告诉它要使用哪个文件。

(gdb) set logging file my_god_object.log

您可以检查当前的日志记录配置。

(gdb) show logging

15
如果你想输出去到日志文件,请使用set logging redirect on
本C

5
我们不应该设置set logging file my_god_object.logset logging on
疱疹免费工程师

这种加tail -fawk是真正有用的今天。谢谢!
回收

12

我发现您可以通过以下run命令将输出从gdb重定向到文件:

(gdb) run > outfile

11
那将是被调试程序的输出,而不是gdb本身的输出。OP希望记录gdb自己的输出。
保罗


@thepaul,但这实际上非常有用,因为我正在调试一个QT程序,它只是用它的QDebug垃圾来
破坏

@ rostamn739哎呀,根本没有帮助
rostamn739

12

扩展@qubodup的答案

gdb core.3599 -ex bt -ex quit |& tee backtrace.log

-ex开关运行GDB命令。因此,上面加载了核心文件,先运行bt命令,然后运行quit命令。输出被写入backtrace.log屏幕,也被写入屏幕。

另一个有用的gdb调用(使用来自所有线程的局部变量给stacktrace)是

gdb core.3599 -ex 'thread apply all bt full' -ex quit

在某些系统上,您需要输入gdb -c core.3599 ...
user7610 '16

1
> gdb core.3599 -ex'thread apply all bt full'-ex quit添加--batch以在没有提示的情况下运行-eg sudo gdb --batch core.3599 -ex'thread apply all bt full'-ex quit>输出.log
David Skelly,

9

https://sourceware.org/gdb/onlinedocs/gdb/Logging-Output.html

您可能需要将gdb命令的输出保存到文件中。有几个命令可以控制gdb的日志记录。

set logging on

启用日志记录。

set logging off

禁用日志记录。

set logging file file

更改当前日志文件的名称。默认日志文件是gdb.txt。

set logging overwrite [on|off]

默认情况下,gdb将追加到日志文件。如果要设置登录以覆盖日志文件,则设置覆盖。

set logging redirect [on|off]

默认情况下,gdb输出将同时到达终端和日志文件。如果只希望输出到日志文件,则设置重定向。

show logging

显示日志记录设置的当前值。



5

在仍然看到输出的情况下(易于编写命令)将gdb登录到文件的一种简单方法是使用tee

gdb command |& tee gdb.log

1

尽管这里有很多好的答案,但我仍然必须发布对我有用的唯一内容:

[niko@my-laptop]# gdb MyBinary 2>&1 log.txt

这是将gdb 二进制输出输出到同一log.txt文件中的唯一方法,同时也在控制台上看到它。

编辑:

警告: gdb输出和二进制输出之间似乎未部分同步输出。有人可以确认吗?您可能要检查telnet / ssh客户端是否具有记录在控制台中看到的输出的功能。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.