10

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):

4
  • 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? Commented Dec 14, 2015 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. Commented Dec 15, 2015 at 0:46
  • And yes, the lldb print command doesn't print a formatted string. I edited my post to state that obvious point. Commented Dec 15, 2015 at 0:47
  • Well the page I refer to seems clear and extensive enough... Commented Dec 15, 2015 at 0:47

2 Answers 2

7

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.

Sign up to request clarification or add additional context in comments.

Comments

4

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

2 Comments

The correct command is "settings" (plural). I wish I could just edit the answer, but the minimum edit is at least 6 characters.
lldb's command line always uses the "shortest unique completion" for all the command words, so it can have descriptive names and yet users do not have to type them all. Many people I've talked to think it's set set...

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.