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。看见