gpt4 book ai didi

c - lldb: `print` 和 `display` 的一行输出

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:31 25 4
gpt4 key购买 nike

例如,源代码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;
}

使用 LLDB 调试器,打印 产生:

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

问题 0:如何在 print 的一行上进行紧凑打印,就像 GDB 一样:

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

使用 LLDB 调试器,显示 a显示 b 产生:

- 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:如何在 display 的两行上进行紧凑打印,如 GDB:

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)

关于c - lldb: `print` 和 `display` 的一行输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31328204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com