7

I'd like to print a string, either const char* or std::string, using lldb so that it is human readable. Most importantly, \n's would be printed as a newline. Does anyone know how to do this? I tried the advice given for gdb in this post, however it doesn't seem to work with lldb.

Edit: I'm aware that you can issue the print myString command to print the string, however it doesn't format newline characters (at least not by default):

Community
  • 1
  • 1
rich.e
  • 3,660
  • 4
  • 28
  • 44
  • What is wrong with the information presented on the page that comes up as the first result on a Google search for `lldb C++ print string`? Is it because the "printable character"/'C' formatter doesn't expand the newline? Why do you think LLDB is capable of anything further than what is detailed on this remarkably extensive documentation page? – Lightness Races in Orbit Dec 14 '15 at 23:07
  • 2
    Extensive documentation? LLDB's documentation pages are one of the most difficult things to follow that I've come across. I virtually never find what I'm looking for. – rich.e Dec 15 '15 at 00:46
  • And yes, the `lldb print` command doesn't print a formatted string. I edited my post to state that obvious point. – rich.e Dec 15 '15 at 00:47
  • Well the page I refer to seems clear and extensive enough... – Lightness Races in Orbit Dec 15 '15 at 00:47

2 Answers2

5

Most of the time you want to see the literal contents of your strings, so the default lldb behavior for print is correct. However, it would be useful to have a format option to "render" the output in the same way the standard libraries would do a string. That's basically what the gdb "printf" command is. Please file a bug with the lldb.llvm.org bug reporter asking for this.

Just like with gdb, you can get the standard library to render the text for you:

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

I cast it to void in this case because I didn't care about the return value, and it makes it harder to see the text.

As was pointed out in the post you referred to, if your output is not going to a terminal somewhere, that isn't helpful, so some explicit "render the output" option would be a good idea as well. But that should only happen if you attach to, rather than run, your program in the debugger.

Jim Ingham
  • 25,260
  • 2
  • 55
  • 63
1

As of 2023, you can now do this with setting set escape-non-printables false. That will print all strings without escaping newlines.

GaryO
  • 5,873
  • 1
  • 36
  • 61