【问题标题】:LLDB summary strings without quotes不带引号的 LLDB 摘要字符串
【发布时间】:2021-05-08 05:30:48
【问题描述】:

假设我有一个包含两个 c 字符串的 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"

【问题讨论】:

  • 格式说明符有影响吗? type summary add PathExample --summary-string "${var.partA%s}${var.partB%s}"(目前我无法亲自尝试。)
  • 很遗憾没有。我尝试了一些不同的格式说明符,包括%s,但它们似乎并没有改变输出。

标签: c++ lldb


【解决方案1】:

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

使我们能够保持摘要字符串版本相当受限的一点是,您始终可以编写 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 目录中有一堆这些,command script import 在我的 ~/.lldbinit 中。

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

【讨论】:

  • 谢谢,我没有想到我可以自己在python中获取摘要并去掉引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 2011-04-16
  • 2021-11-20
  • 2019-08-09
  • 2023-03-27
相关资源
最近更新 更多