首页 > 解决方案 > 编写重复性 gdb 作业的脚本

问题描述

我想在 gdb 中跨一堆不同的文件做同样的重复工作。即,

bash$ gdb ./file1

... gdb starts up ...

gdb$ b *0xdeadbeef
gdb$ r < file2

... some output prints ...

gdb$ x/3a $esp

...  some addresses print ...

有什么方法可以编写这个脚本吗?通过脚本启动 gdb 很容易,但是将命令传递给 gdb 并获取它们的输出对我来说并不明显。我会使用重定向吗?

标签: cbashgdb

解决方案


您可以使用 shell 技巧gdb按顺序传递多个命令,换行符分隔到 的标准输入gdb,供其使用。例如,对于单个文件,只需执行

printf '%s\n' 'b *0xdeadbeef' 'r < file2' 'x/3a $esp' | gdb ./file1

对于多个输入文件,一次输入一个文件gdb,以 name 开头file*。根据您的实际文件名使用适当的 glob 表达式

for file in file*; do
    printf '%s\n' 'b *0xdeadbeef' 'r < file2' 'x/3a $esp' | gdb "$file"
done

推荐阅读