GDB 内写脚本调试程序

很多纯 C 语言的项目都会自己开发一套基础数据结构,比如最常见的就是造一个 C++ Vector 或者 String 的轮子,有了 Vector 以后就可以往里面自由 add() 任意类型的数据,在具体实现中用 Void* 做强制类型转换,这样带来的问题是无论 gdb 还是 printf 调试程序,都必须手动转换指针指向的那一块内存区域:强制转换类型、明确数据占据的内存大小。例如 gdb 中打印 vector[0] 或者 vector[i] 的命令就必须写成这样:

print *((unsigned long*)(vec->data + 8*i))

当无法修改程序源码只能用 gdb 时,打印一个 vector 数组是相当蛋疼的事情,好在 gdb 提供了一个自定义命令的功能,或者说可以先把自定义的命令写成一串指定保存到文本中,然后在 gdb 中加载这个文件就可以使用这个命令了:

define printvec
set $total = $arg0->n_element // arg0 表示输入的第一个参数,arg1 类推
set $i = 0
print $total
while ($i < $total) 
print *((unsigned long*)($arg0->data + 8*$i))
set $i = $i+1
end
end

(gdb) source cmd.txt
(gdb) printvec vec

原创文章,转载请注明出处。本文链接地址: GDB 内写脚本调试程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值