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

8
我想通过lldb打印一个字符串,可以是const char*std::string,以便人类可读。最重要的是,\n将被打印为换行符。有人知道怎么做吗?我尝试了在这篇文章中给出的gdb建议,但它似乎在lldb中不起作用。
编辑:我知道您可以发出print myString命令来打印字符串,但它不会格式化换行符(至少默认情况下不会)。

在谷歌搜索“lldb C++ print string”时,第一个结果页面上呈现的信息有什么问题?是因为“可打印字符”/'C'格式化程序不会扩展换行符吗?您认为LLDB能否做出比这个非常详尽的文档页面更多的事情? - Lightness Races in Orbit
2
广泛的文档?LLDB的文档页面是我遇到过的最难理解的东西之一。我几乎从来找不到我要找的内容。 - rich.e
是的,'lldb print'命令不会打印格式化字符串。我编辑了我的帖子来阐明这一点。 - rich.e
嗯,我所指的页面看起来很清晰而且内容相当详尽... - Lightness Races in Orbit
2个回答

6
大多数时候,您希望查看字符串的字面内容,因此默认的lldb打印行为是正确的。但是,如果有一个格式选项来以标准库处理字符串的方式“渲染”输出,那将非常有用。这基本上就是gdb的“printf”命令所做的。请使用lldb.llvm.org bug报告器提交bug,要求添加此功能。
与gdb一样,您可以让标准库为您呈现文本:
(lldb)  expr (void) printf("Some text\nMore text\nEven more text\n")
Some text
More text
Even more text
(lldb)

我将在这种情况下将其转换为void,因为我不关心返回值,并且它使文本更难看。
正如您所指出的那样,在您引用的帖子中指出,如果您的输出不会到达某个终端,则这并没有什么帮助,因此一些明确的“呈现输出”选项也是一个好主意。 但是,只有在您附加到而不是运行调试器中的程序时才会发生这种情况。

1
从2023年开始,您现在可以使用setting set escape-non-printables false来执行此操作。这将打印所有字符串而不转义换行符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接