在GDB中,commands
命令允许你为特定的断点、观察点或捕获点指定一系列GDB命令,这些命令在断点被触发时自动执行。这非常有用,例如,当你希望每次达到断点时自动打印某些变量的值,或者运行一些特定的GDB命令来改变执行环境或记录一些信息。
基本使用方法
语法如下:
(gdb) commands [breakpoint-number]
> [command1]
> [command2]
> ...
> end
[breakpoint-number]
是你想要附加命令的断点的编号。如果省略,则应用于最近设置的断点。[command1]
,[command2]
,...
是在断点触发时你希望自动执行的GDB命令。end
表示命令列表的结束。
示例
假设有一个程序example.c
,你已经在其中设置了一个断点,现在你想每当到达这个断点时,自动打印变量a
和b
的值,然后继续执行程序。你可以这样做:
- 首先,启动GDB并设置一个断点:
(gdb) break example.c:10
假设这是断点1。
- 接下来,使用
commands
命令来指定断点触发时要自动执行的命令:
(gdb) commands 1
> print a
> print b
> continue
> end
这样设置后,每当程序执行到example.c
文件的第10行时,GDB会自动打印变量a
和b
的值,并继续执行程序,而不需要手动干预。
高级用法
- 在断点处停止并执行命令:如果你想在断点处停下来,执行一系列命令,然后手动决定是否继续,就不要在
commands
序列中包括continue
命令。 - 条件执行命令:你可以在
commands
块中使用if
语句来条件性地执行某些命令。 - 调用自定义脚本:在
commands
块中,你可以调用外部脚本或使用GDB的shell
命令执行系统命令。
使用commands
命令可以大幅提升你使用GDB调试的效率,特别是在需要自动化一些重复任务时。