我在要执行的文件中有一些gdb命令。我还希望将命令运行并将输出记录到文件中。
我在名为gdb.in
的文件中编写了以下gdb脚本。
set logging file gdb.out
set logging on
echo hi\n
printf "bye\n"
quit
但是,如果我执行此gdb脚本,我只能看到记录到gdb.out
的输出。我没有看到执行的命令。
$ gdb -x gdb.in
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
hi
bye
$ cat gdb.out
hi
bye
据我所知,几年前,我找到了记录命令的方法。以前的每个命令都以+
- 符号作为前缀出现在日志文件中。例如,几年前我就能得到这样的输出。
+ echo hi\n
hi
+ printf "bye\n"
bye
+ quit
但是我无法回想起我做了什么来获得这样的输出。搜索网络对我没有帮助。我在How to dump the entire GDB session to a file, including commands I type and their output?遇到了这个问题,但那里的答案并没有捕获日志文件中执行的命令。
答案 0 :(得分:3)
这是GDB feature request的主题,至少有12年的历史: - (
目前无法实现这一目标。您可以使用script
来记录整个GDB会话,但这也有一个明显的缺点,即记录各种屏幕控制“垃圾”字符。
答案 1 :(得分:2)
set trace-commands on:在执行命令之前在屏幕上回显该命令。将此与日志一起使用,以将命令写入文件。
答案 2 :(得分:1)
我不知道它何时引入,但@prasannatsm presents the solution here):set trace-commands on
。
我想补充一下并显示完整的过程。这就是我现在喜欢开始记录的方式:
set logging file ~/temp/gdb.txt
set logging on
set trace-commands on
show logging
flush
show logging
最后只是为了验证所有内容是否均已记录并按预期工作。
请注意,set trace-commands on
会立即将您键入的每个命令回显给您(并在登录时也会记录),并在其前面带有一个+
,以表明它是一个回显的命令输入,不是回应。
这可以在这里的输出中看到,例如:
+show logging Currently logging to "/home/gabriel.staples/temp/gdb.txt". Logs will be appended to the log file. Output will be logged and displayed. +flush Register cache flushed.