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

来源:互联网 发布:ios网络请求http协议 编辑:程序博客网 时间:2024/06/06 19:18
参考资料:点击打开链接
  借助于上面的参考资料,编写自己的脚本工具。参考资料中也是借鉴pstack这个工具,它是用一个脚本,脚本中通过调用gdb来打印当前运行的栈信息,而不用中断程序或手动gdb。更多的信息,还是去看参考资料吧,上面讲的比较详细。

  我的脚本如下:

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

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