有时候需要查看coredump文件中数组元素的值,数量少可以手动查看,如果数组很大就需要自动化处理。
1、gdb变量定义
set variable $i = 0
variable 可以省略,或者是开头至少两个字母的部分拼写,比如:va、var、vari。
修改它的值同样需要使用set语句,比如:set $i = $i + 1
。
gdb变量前边必须有$,否则会认为是程序中的变量。
2、gdb支持的控制结构
判断:if ... else ... end
循环:while ... end
,注意打断和继续循环是:loop_break 和 loop_continue
3、数组元素的输出
就像普通代码一样:
set variable $i = 0while p arr[$i] set $i = $i + 1 if $i >= arr_len loop_break endend
也可以是
set variable $i = 0while $i < arr_len p arr[$i] set $i = $i + 1end
还可以利用条件表达式只输出自己关心的元素。
4、性能
如果在一个很大的数组里边查找自己需要的结果,会花费很长时间。此时不妨增加一下定时的输出,让我们知道它还活着:
set variable $i = 0while $i < arr_len if arr[$i] > 10000 p arr[$i] end set $i = $i + 1 if $i%1000 == 0 p $i endend
5、重复调用的函数和它的文档
define find_items if $argc != 3 help find_items return end set variable $i = 0 while $i < $arg1 if $arg0[$i] > $arg2 printf "%d %d\n", $i, $arg0[$i] end set $i = $i + 1 if $i%1000 == 0 p $i end endenddocument find_items Find items in the array that are greater than the specified value usage: array array_length thresholdend
这样find_items可以反复调用,更加方便。
欢迎关注
暂时无法开通评论,欢迎留言提问,增加话题。