如何在LLDB中格式化传入函数的C数组?
LLDB中将int指针按数组单行格式化显示
当数组传入函数退化为int*后,LLDB默认无法直接识别它的数组长度,需要通过强制类型转换让LLDB将指针当作指定长度的数组处理,具体方法如下:
临时快速显示
进入quicksort函数后,如果你知道数组总长度(比如示例中是10,或可通过high + 1计算),执行以下命令:
frame variable *(int(*)[10])a
这条命令把指针a强制转换成int[10]类型的指针再解引用,LLDB会输出你想要的单行大括号格式:
(int [10]) $0 = {3, 0, 9, 4, 2, 17, 99, 69, 7, 1}
自定义别名简化操作
如果需要频繁使用,可给该操作设置别名:
command alias parrayinline expr -- *(int(*)[%1])%2
之后只需传入长度和指针变量名即可快速调用:
parrayinline 10 a
为什么之前的命令无效?
var *a -c:*a是单个int值,无法批量显示数组元素;var a --count 10:显示的是10个连续的int*指针,而非int数组元素;type summary add -x "int \[[0-9]+]":该规则匹配的是原生数组类型(如int array[10]),但函数参数a已退化为int*,无法触发该规则。
内容的提问来源于stack exchange,提问作者friendlyman23
相关产品推荐
相关产品推荐

