1,不退出gdb,执行shell命令
(gdb) shell ls
a.out foo more.c pipe1.c test1.c test.c
(gdb) shell gcc test.c -g
2,不退出gdb,执行make命令
(gdb) make
3,保存GDB 命令的输出到一个文件里
-
set logging on
激活日志功能.
-
set logging off
关闭日志功能.
-
set logging file file
改变当前的logfile 名字. 默认的logfile 是‘gdb.txt’.
-
set logging overwrite [on|off]
默认的,gdb 会以附加的方式保存日志。如果你想改为覆盖方式保存的话,可以设置为覆盖方式。
-
set logging redirect [on|off]
默认的,gdb 输出会打印到终端和logfile。可以将终端重定向到logfile 里,如果你只要它输出到logfile 里。
-
show logging
显示当前日志设置
4,path和环境变量
-
path directory
在PATH 环境变量的前头加上diretory(可执行程序的搜索路径)。 -
show paths
显示可执行程序的搜索路径列表(PATH 环境变量)。
-
show environment [varname]
打印名为varname 的环境变量的值。如果你没提供varname,打印所有的环境变量的名
称和值。你可以缩写environment 为env. -
set environment varname [=value]
5,调试一个已经在运行的进程
(gdb) attach process-id
6,checkpoint功能
在某些操作系统(目前只在GNU/Linux 上),GDB 可以保存一个程序状态的快照,称为检查点,以后可以跳回。跳回到检查点会撤销所有在检查点之后的变化。这些变化包括内存,寄存器,甚至系统状态(有些限制)。这样可以有效的及时回到在检查点设置的状态。
因此,如果你单步调试到你认为你接近到快要发生错误的地方,你就可以保存一个检查点。接着,如果你不经意的走的太远错过了关键的状态,你可以回到检查点后再从那里开始,而不需要从头启动程序。
检查点对于需要很长时间或者单步调试里bug 发生地方很远的情况下很有帮助。
-
checkpoint
保存被调试程序当前执行状态的快照。checkpoint 命令不需要参数,但每个检查点都分
配一个小整数标识,如同breakpoint 标识一样。 -
info checkpoints
列出在当前被调试会话的检查点。对于每个检查点,信息显示如下:
Checkpoint ID
Process ID
Code Address
Source line, or label(gdb) info checkpoints 1 process 20516 at 0x4006e9, file test.c, line 30 * 0 process 20512 (main process) at 0x4006e9, file test.c, line 30
-
restart checkpoint-id
在检查点号的状态上重新启动。所有程序变量,寄存器,栈帧等等都恢复到检查点上保
存的状态。本质上将,gdb 会把时钟回拨到检查点所记录的时间。 -
delete checkpoint checkpoint-id
删除以前保存的检查点