gdb batch mode

gdb  binary  –batch -ex “info functions clock”

显示binary中所有.*clock.*函数 , 然后退出gdb.

非常有用。其中–batch 告诉gdb运行完命令后退出。-ex 指定要执行的gdb命令。另外如果要在一个文件中指定一系列命令,可以用 –command=FILE 或者  -x <文件名>。

下面是非常有用的shell脚本用来查找指定函数,并在这些函数上设置断点,然后运行程序,在每次这些函数被调用的时候,打印出5层堆栈。程序结束,自动退出。如果设置足够多的函数断点,可以打印出所有的函数调用关系,然后后处理该脚本的输出,可以得到一个函数调用图。这是一个比较快捷的方法。

最后的args 文件中需要保存运行workbinary命令的参数。

————————————

funcs=`gdb –batch ../bin/Debug/workbinary -ex “info functions Foo” | sed -n “/(/ p” | cut -f 1 -d ‘(‘  | cut -f 2 -d ‘ ‘`
rm -rf gdbcommands
touch  gdbcommands
cnt=0
for f in $funcs
do
echo “b $f”  >> gdbcommands
cnt=`expr $cnt + 1`
done

times=`seq 1 $cnt`
for t in $times
do
echo “commands $t”  >>gdbcommands
echo “bt 5”  >>gdbcommands
echo “c”  >> gdbcommands
echo “end” >> gdbcommands
echo “” >> gdbcommands
done

gdb –batch ../bin/Debug/workbinary -x gdbcommands -x args

——————————————————————————————–



本文地址: http://www.bagualu.net/wordpress/archives/2963 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注