gdb:不退出程序的情况下打印函数中的局部变量

参考资料:点击打开链接
  借助于上面的参考资料,编写自己的脚本工具。参考资料中也是借鉴pstack这个工具,它是用一个脚本,脚本中通过调用gdb来打印当前运行的栈信息,而不用中断程序或手动gdb。更多的信息,还是去看参考资料吧,上面讲的比较详细。

  我的脚本如下:

#!/bin/sh
command="source key.gdb"
readnever=""
GDB=${GDB:-/usr/bin/gdb}
i=0
result=""
 
$GDB --quiet $readnever -nx /proc/$1/exe $1 <<EOF 2>&1 |
set width 0
set height 0
set pagination no
$command
EOF
awk '/^\$/{print $0}' | awk '{print $3}'
上面的就是一个shell脚本,使用awk是为了过滤输出的信息,这里只是针对我的需求的过滤规则,你要使用的话,可以选择sed或其他擅长的工具。真正的gdb命令保存在key.gdb中,如下所示:

b fcache_cluster.c:245
c
p/x ((struct sockaddr_in*)node)->sin_addr.s_addr
方法很简单,就是在想要打印的局部变量赋值后的位置添加一个断点,然后执行"c"命令,然后添加一条打印局部变量的命令。
如果想要多次查看局部变量的值,可以使用watch工具或者直接在shell中使用for或while循环来调用上面的shell脚本


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章