我想查看一个指针指向的元素数组。在GDB中,这可以通过使用运算符'@‘as将指向的内存视为给定长度的人工数组来实现
*pointer @ length
其中length
是我想要查看的元素数量。
以上语法在随Xcode 4.1提供的LLDB中不起作用。
有没有办法在LLDB中实现上述功能?
发布于 2014-10-10 23:54:32
在lldb中有两种方法可以做到这一点。
最常见的方法是使用parray
lldb命令,该命令接受一个COUNT
和一个EXPRESSION
;EXPRESSION
将被计算并产生一个指向内存的指针。然后,lldb将在该地址打印该类型的COUNT
项目。例如:
parray 10 ptr
其中,ptr
的类型为int *
。
或者,也可以通过将指针转换为指向数组的指针来实现。
例如,如果您有一个int* ptr
,并且希望将其视为一个由十个整数组成的数组,则可以这样做
p *(int(*)[10])ptr
因为它只依赖于标准的C语言特性,所以这个方法不需要任何插件或特殊设置就可以工作。它同样适用于其他调试器,如GDB或CDB,尽管它们也有专门的用于打印数组的语法。
发布于 2016-08-16 06:31:49
从Xcode8.0中的lldb开始,有一个新的内置parray命令。所以你可以说:
(lldb) parray <COUNT> <EXPRESSION>
将EXPRESSION
结果所指向的内存打印为表达式所指向类型的COUNT
元素数组。
如果计数存储在当前帧中可用的变量中,请记住您可以这样做:
(lldb) parray `count_variable` pointer_to_malloced_array
这是一个通用的lldb特性,lldb中用反引号括起来的任何命令行参数都将作为返回整数的表达式进行计算,然后在命令执行之前用该整数替换该参数。
发布于 2012-10-18 10:46:21
使用Xcode 4.5.1 (现在可能对您有帮助,也可能没有帮助),您可以在lldb控制台中完成以下操作:
(lldb) type summary add -s "${var[0-63]}" "float *"
(lldb) frame variable pointer
(float *) pointer = 0x000000010ba92950 [0.0,1.0,2.0,3.0, ... ,63.0]
此示例假设'pointer‘是64个浮点数的数组:float pointer[64];
https://stackoverflow.com/questions/7062173
复制相似问题