Gdb打印到文件而不是stdout

pyt*_*hor 98 printing redirect gdb

我正在运行gdb并想要检查其中一个不幸的上帝对象.它需要很多页面(而且我有一个24英寸的显示器转向侧面!)看到整个事情.为了便于使用,我希望gdb将对象打印到文件而不是屏幕,以便我可以打开它vi并轻松移动.有了所有gdb的多功能性,必须有办法做到这一点,对吧?

Tad*_*ski 144

您需要启用日志记录.

(gdb) set logging on
Run Code Online (Sandbox Code Playgroud)

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

(gdb) set logging file my_god_object.log
Run Code Online (Sandbox Code Playgroud)

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

(gdb) show logging
Run Code Online (Sandbox Code Playgroud)

  • 如果您希望输出_only_到日志文件,请使用`set logging redirect on`. (13认同)
  • 我们不应该在“设置登录”之前设置“设置日志文件my_god_object.log”吗? (3认同)

Luc*_*hez 13

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

(gdb) run > outfile
Run Code Online (Sandbox Code Playgroud)

  • 这将是被调试程序的输出,而不是gdb本身的输出.OP想要记录gdb自己的输出. (9认同)
  • @thepaul 但这实际上非常有用,因为我正在调试一个 QT 程序,该程序只是用 QDebug 垃圾来破坏 gdb 的标准输入 (2认同)

use*_*610 10

延伸@ qubodup的答案

gdb core.3599 -ex bt -ex quit |& tee backtrace.log
Run Code Online (Sandbox Code Playgroud)

-ex开关运行GDB命令.所以上面加载核心文件,运行bt命令,然后quit命令.输出被写入backtrace.log屏幕并且也被写入屏幕.

另一个有用的gdb调用(给出来自所有线程的局部变量的栈跟踪)是

gdb core.3599 -ex 'thread apply all bt full' -ex quit
Run Code Online (Sandbox Code Playgroud)


qub*_*dup 5

将 gdb 记录到文件同时仍能看到输出(这简化了编写命令)的一种简单方法是使用tee

gdb command |& tee gdb.log
Run Code Online (Sandbox Code Playgroud)


hus*_*ade 5

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

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

set logging on
Run Code Online (Sandbox Code Playgroud)

启用日志记录。

set logging off
Run Code Online (Sandbox Code Playgroud)

禁用日志记录。

set logging file file
Run Code Online (Sandbox Code Playgroud)

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

set logging overwrite [on|off]
Run Code Online (Sandbox Code Playgroud)

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

set logging redirect [on|off]
Run Code Online (Sandbox Code Playgroud)

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

show logging
Run Code Online (Sandbox Code Playgroud)

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

  • 未经引用即可复制https://sourceware.org/gdb/onlinedocs/gdb/Logging-Output.html的粘贴。 (2认同)