使用 lldb 打印带有换行符的字符串

Posted

技术标签:

【中文标题】使用 lldb 打印带有换行符的字符串【英文标题】:Print string with newlines with lldb 【发布时间】:2015-12-14 23:05:10 【问题描述】:

我想使用 lldb 打印一个字符串,const char*std::string,以便人类可读。最重要的是,\n's 将被打印为换行符。有谁知道如何做到这一点?我尝试了this post 中为 gdb 提供的建议,但它似乎不适用于 lldb。

编辑:我知道您可以发出print myString 命令来打印字符串,但它不会格式化换行符(至少默认情况下不会):

【问题讨论】:

在 Google 搜索 lldb C++ print string 时出现的第一个结果页面上显示的信息有什么问题?是因为“可打印字符”/'C' 格式化程序没有扩展换行符吗?为什么你认为 LLDB 的能力比这个非常广泛的文档页面上的详细信息还要多? 大量文档? LLDB 的文档页面是我遇到的最难理解的事情之一。我几乎找不到我要找的东西。 是的,lldb print 命令不会打印格式化的字符串。我编辑了我的帖子以说明这一点。 嗯,我所指的页面看起来足够清晰和广泛...... 【参考方案1】:

大多数情况下,您希望查看字符串的文字内容,因此 print 的默认 lldb 行为是正确的。但是,有一个格式选项来“渲染”输出,就像标准库执行字符串一样。这基本上就是 gdb "printf" 命令的内容。请向 lldb.llvm.org 错误报告者提交错误请求。

就像使用 gdb 一样,您可以获取标准库来为您呈现文本:

(lldb)  expr (void) printf("Some text\nMore text\nEven more text\n")
Some text
More text
Even more text
(lldb)

在这种情况下,我将其转换为 void,因为我不关心返回值,这使得查看文本变得更加困难。

正如您在帖子中所指出的那样,如果您的输出没有发送到某个地方的终端,那将无济于事,因此一些明确的“渲染输出”选项也是一个好主意。但只有在调试器中附加而不是运行程序时才会发生这种情况。

【讨论】:

以上是关于使用 lldb 打印带有换行符的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LLDB 打印内存地址的内容?

为啥powershell不打印带有换行符的txt?

使用 Xcode/LLDB 打印/调试 libc++ STL

在 Pandas DataFrame 中的字符串内漂亮地打印换行符

(lldb) 以十六进制打印 unsigned long long

在换行符后从文件中打印出字符串