C lldb:“打印”和“显示”的一行输出`

C lldb:“打印”和“显示”的一行输出`,c,macos,lldb,C,Macos,Lldb,例如,使用源代码main.c: #include <stdio.h> int main() { int a[10] = {0,1,2,3,4,5,6,7,8,9}; int b = 2; printf("line 7\n"); printf("line 8\n"); return 0; } 问题0:我如何才能像使用GDB一样,在一行上打印出紧凑的print: $1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 2: b

例如,使用源代码
main.c

#include <stdio.h>

int main()
{
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
    int b = 2;
    printf("line 7\n");
    printf("line 8\n");
    return 0;
}
问题0:我如何才能像使用
GDB
一样,在一行上打印出紧凑的
print

$1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
2: b = 2
1: a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
使用
LLDB
调试器,
display a
display b
生成:

(int [10]) $0 = {
  [0] = 0
  [1] = 1
  [2] = 2
  [3] = 3
  [4] = 4
  [5] = 5
  [6] = 6
  [7] = 7
  [8] = 8
  [9] = 9
}
- Hook 1 (expr -- a)
(int [10]) $0 = {
  [0] = 0
  [1] = 1
  [2] = 2
  [3] = 3
  [4] = 4
  [5] = 5
  [6] = 6
  [7] = 7
  [8] = 8
  [9] = 9
}

- Hook 2 (expr -- b)
(int) $1 = 2
问题1:我怎样才能像使用
GDB
一样,在
显示器
上获得两行紧凑打印:

$1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
2: b = 2
1: a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

默认情况下,关于哪些类型可以和不可以“一行”打印的决定是在FormatManager::ShouldPrintAsOneLiner中硬编码的

用户可以调整的唯一设置是

(lldb) settings show auto-one-line-summaries
auto-one-line-summaries (boolean) = true
充当功能的全局终止开关(true表示“允许”)

解决问题的快速方法是手动为所有int数组添加摘要,因此:

(lldb) type summary add -x "int \[[0-9]+]" -c
也就是说,对于名称与正则表达式int匹配的所有类型[后面跟一个或多个数字,后面跟一个],则强制使用一行格式

有了这个,我就明白了

(lldb) fr var x
(int [10]) x = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7, [8] = 8, [9] = 9)
(lldb) expr x
(int [10]) $2 = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7, [8] = 8, [9] = 9)
尽管如此,我认为您使用的是较旧版本的LLDB

在调试程序的最新版本中,即使没有自定义格式,我也会得到一行显示:

(lldb) expr x
(int [10]) $0 = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7, [8] = 8, [9] = 9)

我不知道答案,但你为什么想要这个?顺便说一句,问题索引很好…:-)@我正在调试一个代码,想显示17个变量。在GDB中,在12行上的输出。在LLDB中,有很多行,而且很难阅读,我必须滚动屏幕,为整个阵列打印一行。你的
~/.lldbinit
中有什么?@user744629:我的是lldb-330.0.48。看见