我正在进行GDB调试,并有一个长度为20,000的数组。大部分元素都是零,但在索引10000
左右有几个感兴趣的元素。不幸的是,当我输入p the_array[10000]@30
时,会出现“只有内存中的值才能使用'@'扩展”。那么如何可视化数组的一部分而不必手动请求范围内每个索引的元素,比如40-50个元素的范围?
我希望这可以工作。实际上它对我有效。我有这个小程序:
int x[10000];
现在在gdb中:
(gdb) p x[50]@3
$2 = {0, 0, 0}
你的问题存在许多细节缺失。可能是你的gdb有bug,也可能是你的数组在某些方面存在异常。gdb版本和"whatis the_array"等信息可能很有意义。
看起来我们不能使用地址扩展内存区域
(gdb) p (struct tfc *)0x1d88a010@100
Only values in memory can be extended with '@'.
但这很好用
(gdb) p *tfc->buckets@100
$87 = {0x0 <repeats 49 times>, 0x7f3b63a1b060, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f3b21816c90, 0x0 <repeats 18 times>, 0x7f3ae97f9e80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f3b49c96760, 0x0 <repeats 14 times>, 0x7f3adb16d8f0}
print ((unsigned long long*)0x7ffff6ffb000)[0]@20
,如果是指针,则使用 print ((void **)0x7ffff6ffb000)[0]@20
,只需将类型替换为数组中实际的类型即可。 - Michael Speer