使用gdb调试过程中,对于批量的数据处理和检测,尤其是来自内存的信息时,手动调试需要不停的重复操作:查看地址内容->取地址内容->查看新的地址内容……,当需要做成百上千的重复操作时,这时候,使用gdb的自定义脚本会带来很大的便捷。
外部编辑脚本文档:name.gdb
define my_print
if $argc != 2
help my_print
else
set $list = $arg0
set $span = $arg1
set $prev = ((tcmalloc::Span*)$list)->prev
set $count = 0
while ($prev != $list && $prev != $span)
p *(tcmalloc::Span*)$prev
set $prev = ((tcmalloc::Span*)$list)->prev
set $count++
end
printf "Search over, %d\n", $count
end
end
document my_print
my_print [list] [span]
end
其中取值时常用的通用变量:
$_ : 上一个取址命令的源地址
$__ : 上一个取址命令的地址内容
然后通过在gdb命令行下执行
(gdb) source name.gdb
(gdb) my_print xxx xxx
即可执行脚本内容