2011-04-08 123 views
4

例如说,我有一个C源文件,其方法类似于foo(a),其中a是一个字符。在gdb中编写脚本

我想为每个字符打印foo的输出比系统地通过输入p foo('a')然后p foo('b')更容易吗?

理想情况下,我很想编写脚本,因此速度更快。

回答

7

我设法弄明白,我的代码基本上是:

define foo_test 
    set $a = 97 
    set $b = 123 

    while $a < $b 
     p (char)foo($a) 
     set $a = $a + 1 
    end 
end 
+0

然后运行通过只是在gdb的提示符下键入“foo_test”的脚本。 如果您在文本编辑器中创建它,然后粘贴它,请务必使用空格而不是制表符。 – 2014-06-13 23:16:06

2
perl -e 'foreach $i ("a" .. "z") { print "print foo('\''$i'\'')\n"; }' > /tmp/t.$$ && 
gdb --batch -x /tmp/t.$$ ./a.out ; rm -f /tmp/t.$$ 

您还应该看看GDB Python scripting

0

这听起来像你应该添加的第一件事是一些“断点命令列表”, 这些将允许你在断点命中后运行一些gdb命令。

所以,如果你添加这样你的打印运行时,有人调用函数富, 你应该是越来越近。