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脚本


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值