在bash中,我可以使用script
命令,它将shell上显示的所有内容转储到文件中,包括:
gdb中的等价物是什么?
我试图从GDB内部运行shell script
,但在我点击返回后,我在shell中并丢失了shell提示符,无法再运行命令。而且我无法使用ctrl + c或ctrl + \退出。我需要强行杀死/bin/login tty2
才能退出。
答案 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 -x gdbCommands.txt myApp core.2345
my_log_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
任何人都知道为什么或如何解决它?