I have found that
print <expr> often doesn’t work while running a debug build of clang in lldb. So I have to resort to print statements. Since is not used inside LLVM/Clang code, I have to include it in manually and remember to remove it before committing. Is there a better way to do this, either in lldb or insert print statements?
Depending on the type of <expr> it's also worth trying `print <expr>.dump()` or `print <expr>.print()`.
Otherwise this may come in handy:
LLVM_DEBUG(dbgs() << "I am here!\n");
Don't forget to enable it: "One additional nice thing about the LLVM_DEBUG() macro is that you can enable or disable it directly in gdb. Just use “set DebugFlag=0” or “set DebugFlag=1” from the gdb if the program is running. If the program hasn’t been started yet, you can always just run it with -debug."
dump functions, as Matt mentioned, are probably the immediate go-to.
Otherwise if you want to improve 'print <expr>' support, it probably
involves writing pretty printers like/in here:
I don't have any problems with printing inside gdb.
Except that we lack a bunch of pretty-printers which is unpleasant.
In those cases, you can use the `dump` method of the corresponding entity. However, evaluating that function might cause a crash.
Once, I tried to create gdb pretty-printers for the Clang Static Analyzer related types, but it would depend on the pretty printers for other Clang specific types such as `FunctionDecl` etc.
It would require a huge effort of implementing every pretty-printer transitively. 2x - once for gdb and once for lldb.
It would be a huge win for the debugging experience, especially if someone uses an IDE.
Debug symbols + LLVM_ENABLE_ASSERTIONS and LLVM_ENABLE_DUMP usually enough for me.
BTW you can always use `llvm::dbgs() << "hello"`, `llvm::outs()` or `llvm::errs()` instead of the usual iostreams.
Sometimes a few debug statements are beneficial.
IMO you can leave a few of those are wrapped inside the `LLVM_DEBUG` macro. grep a few examples to see if that fits your needs.