[llvm-dev] Printing while developing on LLVM/Clang code

1,271 views
Skip to first unread message

Deep Majumder via llvm-dev

unread,
Feb 11, 2021, 7:20:39 AM2/11/21
to llvm-dev, cfe...@lists.llvm.org
Hi everyone,
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 <iostream> 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?
Warm regards,
Deep

Matt P. Dziubinski via llvm-dev

unread,
Feb 11, 2021, 7:53:33 AM2/11/21
to Deep Majumder, llvm-dev, cfe...@lists.llvm.org

Depending on the type of <expr> it's also worth trying `print
<expr>.dump()` or `print <expr>.print()`.

See: https://bholt.org/posts/llvm-debugging.html,
https://llvm.org/docs/WritingAnLLVMPass.html#the-print-method,
https://clang.llvm.org/hacking.html#debugging

Otherwise this may come in handy:
LLVM_DEBUG(dbgs() << "I am here!\n");

See:
https://llvm.org/docs/ProgrammersManual.html#the-llvm-debug-macro-and-debug-option

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."

Best,
Matt
_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

David Blaikie via llvm-dev

unread,
Feb 11, 2021, 11:02:06 AM2/11/21
to Deep Majumder, llvm-dev, Clang Dev
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:
llvm/utils/lldbDataFormatters.py

via llvm-dev

unread,
Feb 12, 2021, 2:19:04 PM2/12/21
to David Blaikie, Deep Majumder, llvm-dev
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.

print SVal->dump()

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.

Cheers, Balazs.

-----Original Message-----
From: cfe-dev <cfe-dev...@lists.llvm.org> On Behalf Of David Blaikie via cfe-dev
Sent: 2021. február 11., csütörtök 17:02
To: Deep Majumder <deep.maj...@gmail.com>
Cc: llvm-dev <llvm...@lists.llvm.org>; Clang Dev <cfe...@lists.llvm.org>
Subject: Re: [cfe-dev] [llvm-dev] Printing while developing on LLVM/Clang code

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:
llvm/utils/lldbDataFormatters.py

On Thu, Feb 11, 2021 at 4:20 AM Deep Majumder via llvm-dev <llvm...@lists.llvm.org> wrote:
>
> Hi everyone,
> 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 <iostream> 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?
> Warm regards,
> Deep
> _______________________________________________
> LLVM Developers mailing list
> llvm...@lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
_______________________________________________

cfe-dev mailing list
cfe...@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev

Reply all
Reply to author
Forward
0 new messages