不带引号的 LLDB 摘要字符串

LLDB summary strings without quotes

假设我有一个 C++ class,其中包含两个如下所示的 C 字符串。

class PathExample {
    char* partA; // Eg: "/some/folder/"
    char* partB; // Eg: "SomeFile.txt"
}

我可以为它制作一个 lldb 摘要字符串:

type summary add PathExample --summary-string "${var.partA}${var.partB}"

然而,这增加了不必要且令人困惑的引号 "/some/folder/""SomeFile.txt"。 如何格式化类型摘要字符串以不使用引号,或者至少在添加引号之前附加字符串?例如:"/some/folder/SomeFile.txt"

摘要字符串格式化选项不支持在添加到输出之前“删除摘要值中的前导或尾随引号”。我们正在努力使这些选项保持相当精简,但这是一个特殊用途的功能。

让我们能够相当限制摘要字符串版本的是,您始终可以编写 Python 摘要,这样您就可以按照自己喜欢的方式设置输出格式。 Python 脚本部分中有一个示例有点像您想要的:

https://lldb.llvm.org/use/variable.html#python-scripting

您不会像该示例那样使用 GetValueAsUnsigned。 char * 类型的 C 字符串渲染实际上是由内置摘要完成的,因此您可以使用“SBValue.GetSummary”来获取字符串值。这实际上与替换到摘要字符串中的内容相同,因此它上面也有引号。但是在 Python 中,在连接两个字符串之前去除前导引号和尾随引号是微不足道的。

请注意,尽管使用起来很方便,但您不必像示例中所示那样定义内联 Python 摘要回调。您可以将具有正确签名的函数放在某处的 .py 文件中,使用 command script import <path to .py file>,然后使用 -F 选项将其导入 type summary add。请记住在指定函数时使用函数的全名 (module_name.func_name)。我在 ~/.lldb 目录中有一堆这些,在我的 ~/.lldbinit 中 command script import 它们。

help type summary add 提供了有关如何执行此操作的更多详细信息。