如何将整个GDB会话转储到文件中,包括我输入的命令及其输出?

时间:2009-11-10 11:05:20

标签: gdb

在bash中,我可以使用script命令,它将shell上显示的所有内容转储到文件中,包括:

  • 命令键入
  • PS1 line
  • stdout和stderr of commands

gdb中的等价物是什么?

我试图从GDB内部运行shell script,但在我点击返回后,我在shell中并丢失了shell提示符,无法再运行命令。而且我无法使用ctrl + c或ctrl + \退出。我需要强行杀死/bin/login tty2才能退出。

4 个答案:

答案 0 :(得分:32)

如果要记录GDB的输出,可以使用GDB logging output commands,例如。

set logging file mylog.txt
set logging on

如果要将程序的输出重定向到文件,可以使用重定向,例如

run myprog > mylog.txt

有关详细信息,请参阅chapter on program IO in the GDB manual

答案 1 :(得分:2)

  • 使用以下命令
  • 创建一个文本文件,即gdbCommands.txt

set logging on my_log_file\nbt 10\nq

bt 10表示我们需要从回溯中获得的行数(函数调用),在我们的例子中是10行。

  • 使用以下命令执行gdb,假设核心转储文件为core.2345

gdb -x gdbCommands.txt myApp core.2345

  • 打开my_log_file并检查回溯!

howto-redirect-gdb-backtrace-output-to-a-text-file

答案 2 :(得分:0)

查看GDB文档。搜索“命令的固定序列”。有一种方法可以将GDB命令保存在文件中并使用source命令运行它们,您可以在这些脚本中使用一些GDB命令来打印GDB可用的信息(如echo,{{1} }和output)。

如果您想在文件中输出该输出,请使用printf

答案 3 :(得分:0)

我使用以下方式启用了日志记录:

set trace-commands on
set pagination off
set logging file $log

并显示日志记录报告(到终端和文件):

  +show logging
     Currently logging to mylog.
     Logs will be appended to the log file.
     Output will be logged and displayed

如果我打印一个变量的值,该变量的值也被记录到终端和文件中:

+p myvar
$2 = 0

但是,如果我执行where或“ info b”之类的命令,那么我登录到该文件的所有内容就是:

+where
+info b

任何人都知道为什么或如何解决它?