Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198754
  • 博文数量: 43
  • 博客积分: 366
  • 博客等级: 一等列兵
  • 技术积分: 427
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-17 14:03
文章分类

全部博文(43)

文章存档

2018年(2)

2017年(5)

2016年(2)

2015年(3)

2014年(9)

2013年(5)

2012年(8)

2011年(9)

我的朋友

分类: LINUX

2018-10-31 16:33:18

因为经常遇到print_cvs打印失败直接退出的问题,故做了两个方法,打印所有当前的变量名和单个变量,加到现有的.gdbinit就能用
同时记得老版本的print_zv打印的地址是错的,要把printf后面的参数改成[%p]


点击(此处)折叠或打开

  1. define print_vars
  2.     ____executor_globals
  3.     set $p = $eg.current_execute_data.CVs
  4.     set $c = $eg.current_execute_data.op_array.last_var
  5.     set $v = $eg.current_execute_data.op_array.vars
  6.     set $i = 0

  7.     printf "Compiled variables count: %d\n", $c
  8.     while $i < $c
  9.         printf "%d = %s [%p] \n", $i, $v[$i].name, *$p[$i]
  10.         set $i = $i + 1
  11.     end
  12. end

  13. document print_vars
  14.     print all var names
  15. end

  16. define print_var
  17.     ____executor_globals
  18.     set $p = $eg.current_execute_data.CVs
  19.     set $c = $eg.current_execute_data.op_array.last_var
  20.     set $v = $eg.current_execute_data.op_array.vars
  21.     set $i = 0
  22.     set $varname = $arg0
  23.     set $found_var = 0

  24.     printf "Compiled variables count: %d\n", $c
  25.     printf "to print var name %s\n", $varname
  26.     while $i < $c && 0 == $found_var
  27.         if strcmp($varname, $v[$i].name) == 0
  28.             set $found_var = 1
  29.             if $p[$i] != 0
  30.                 printzv *$p[$i]
  31.             end
  32.         end
  33.         set $i = $i + 1
  34.     end
  35. end

  36. document print_var
  37.     print single var, eg: print_var "var1"(without initial $)
  38. end

同时,改写一个方法,原来的gdbinit逻辑是只要不是英文或数字,就打印8进制,现在先把原字符串打印出来:

点击(此处)折叠或打开

  1. define ____print_str
  2.     set $tmp = 0
  3.     set $str = $arg0
  4.     printf "%s", $str
  5.     printf "\""
  6.     while $tmp < $arg1
  7.         if $str[$tmp] > 32 && $str[$tmp] < 127
  8.             printf "%c", $str[$tmp]
  9.         else
  10.             printf "\\%o", $str[$tmp]
  11.         end
  12.         set $tmp = $tmp + 1
  13.     end
  14.     printf "\""
  15. end


阅读(571) | 评论(0) | 转发(0) |
0

上一篇:redis可能波动的几种情况

下一篇:没有了

给主人留下些什么吧!~~