文章目录
- 命令脚本
- python 脚本
命令脚本
首先对于命令脚本的命名,其实 gdb 没有什么特殊要求,只要文件名不是 gdb 支持的其它脚本语言的文件名就可以了(比如.py)
。因为这样做会使 gdb 按照相应的脚本语言去解析命令脚本,结果自然是不对的。
其次为了帮助用户写出功能强大的脚本,gdb 提供了如下的流程控制命令:
- 条件命令:
if...else...end
。这个同其它语言中提供的if命令没什么区别,只是注意结尾的end
。 - 循环命令:
while...end
。gdb 同样提供了 loop_break 和 loop_continue 命令分别对应其它语言中的 break 和 continue ,另外同样注意结尾的 end。
另外 gdb 还提供了很多输出命令。比方说 echo 命令,如果仅仅是输出一段文本,echo 命令特别方便。此外还有和 C 语言很相似的支持格式化输出的 printf 命令,等等。
脚本文件的注释也是以 # 开头的,这个同很多其它脚本语言都一样。
最后指出的是在 gdb 中执行脚本要使用 source 命令,例如:source xxx.gdb
。
编译并调试 C 代码
gcc -g test.c
gdb a.out
命令脚本:新建一个文件 test.gdb
并输入如下内容
echo hello, test gdb1\n
echo hello, test gdb2\n
echo hello, test gdb3\n
echo hello, test gdb4\n
效果展示
python 脚本
编译并调试 C 代码
gcc -g test.c
gdb a.out
python 文件内容
import gdb
print(1+1)
print("hello py")
效果展示
注意事项
- import gdb 仅在 gdb 进程中运行 python 代码时有效。它不应该在常规系统 python 解释器中工作。
- gdb 嵌入了 python 解释器,因此它可以使用 python 作为扩展语言。
- 不能像 /usr/bin/python 一样只是 import gdb,因为它是普通的 python 库,因为 gdb 并不是结构化的库。
- 可以在 gdb 中执行source script.py(等同于运行 gdb -x script.py)。