[lttng-dev] Debugging Libaries in Babeltrace 2

Seidl, Aron aron.seidl at zeiss.com
Wed Oct 25 03:29:26 EDT 2023


Hi Simon,
Thanks for your quick answer!
I run GDB like this:
gdb --args ./babeltrace2 /home/aron/Schreibtisch/kernel4 -o text
(I'm in src/cli/.libs)

I don't think I've ever installed a System Version of babeltrace2, so it is really weird that GDB uses following library:

0x00007ffff7f36f00  0x00007ffff7f89749  Yes (*)     /lib/x86_64-linux-gnu/libbabeltrace2.so.0
(*): Shared library is missing debugging information.

And you're absolutely right! That is the reason why I can't debug it.
Is there a way to specify the library path? Because even with the libtool wrapper, GDB uses the release version of libbabeltrace2.so.0.

You're helping me a lot, thank you! :)
I hope you have a great day!

Kind regards,
Aron
__________
Aron Seidl
DH-Student IT Education

Carl Zeiss AG
Carl-Zeiss-Strasse 22
73447 Oberkochen, Deutschland

aron.seidl at zeiss.com
http://www.zeiss.de/
__________
Carl Zeiss AG
Sitz der Gesellschaft: Oberkochen, Deutschland
Vorsitzender des Aufsichtsrates: Dr. Michael Bolle
Vorstand: Dr. Karl Lamprecht (Vorsitzender),
Susan-Stefanie Breitkopf, Sven Hermann, Dr. Christian Müller,
Andreas Pecher, Dr. Jochen Peter, Dr. Markus Weber
Amtsgericht Ulm, HRB 501 555, USt-IdNr: DE 811 119 940




-----Ursprüngliche Nachricht-----
Von: Simon Marchi <simark at simark.ca>
Gesendet: Dienstag, 24. Oktober 2023 20:52
An: Seidl, Aron <aron.seidl at zeiss.com>; lttng-dev at lists.lttng.org
Betreff: Re: [lttng-dev] Debugging Libaries in Babeltrace 2

On 10/24/23 11:52, Seidl, Aron via lttng-dev wrote:
> Hello guys,
> I'm currently a student at the company Carl Zeiss in Oberkochen Germany. I'd like to trace the Kernel from our CMM-Controller with CTF and convert it to plain text, like Babeltrace 2 does. To understand how Babeltrace 2 works with CTF, I debug the code.

Hi Aron,
:w

>
>
> However when I try to step into a function which is included via the extern Babeltrace 2 library (e.g. *bt_graph_run(ctx.graph)* in graph.c), the GNU Compiler steps over the function and I'm unable to look into this function.
>
>
>
> I figured, it is because the Debugger cannot find the Debug Symbols even though I compile everything with Debug-Symbols and no compiler optimization.
>
> I configure the Makefile as follows:
>
>
>
> BABELTRACE_DEV_MODE=1 BABELTRACE_MINIMAL_LOG_LEVEL=TRACE
> BABELTRACE_DEBUG_MODE=1 CFLAGS='-g -O0' CPPFLAGS='-g -O0' LDFLAGS='-g
> -O0' ./configure

You probably mean CXXFLAGS, not CPPFLAGS.  CXXFLAGS are flags to be passed to the C++ compiler, CPPFLAGS are flags to be passed to the preprocessor.  It's probably going to work anyway, since preprocessor flags are passed when compiling, but I wanted to point it out because it looks like a mistake.

>
>
>
> For test purposes, I implemented the function *bt_graph_run(NULL) *inside a new project to check, if I could step into the function with my debugger, or whether it is a general problem with my machine.
>
> That actually worked and I was able to step into the function, but not with the normal Babeltrace 2 project.
>
> None of my colleagues could explain this behavior, so my question now is, how do you guys debug the code? Is there a different way you debug these functions, or do I configure my project the wrong way?
>
>
>
> I appreciate it if someone can help me and tell me how to configure the project so that the code is debugable.

Can you please show how you start and run babeltrace2 under GDB?

My guess is that you end up using a system version of libbabeltrace2.so from a package you installed or something.  In GDB, do "info shared" and see what the libbabeltrace2.so line looks like.  It should be like this, with a path in your build directory.  There should be no asterisk indicating that the debug info is missing.

    0x00007ffff75a87f0  0x00007ffff76f5990  Yes         /home/smarchi/build/babeltrace/src/lib/.libs/libbabeltrace2.so.0

Since we are using libtool, the src/cli/babeltrace2 file is actually a libtool script that sets up the right environment (LD_LIBRARY_PATH and
stuff) for running the real babeltrace2 binary (found at
src/cli/.libs/babeltrace2) directly in the build tree.  The proper way to debug it is with the libtool wrapper:

    $ libtool --mode=execute gdb -q --args src/cli/babeltrace2 /home/smarchi/src/babeltrace/tests/data/ctf-traces/1/succeed/sequence
    Reading symbols from /home/smarchi/build/babeltrace/src/cli/.libs/babeltrace2...
    (gdb) b bt_graph_run
    Function "bt_graph_run" not defined.
    Make breakpoint pending on future shared library load? (y or [n]) y
    Breakpoint 1 (bt_graph_run) pending.
    (gdb) r
    Starting program: /home/smarchi/build/babeltrace/src/cli/.libs/babeltrace2 /home/smarchi/src/babeltrace/tests/data/ctf-traces/1/succeed/sequence
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

    Breakpoint 1, bt_graph_run (graph=0x6120000025c0) at /home/smarchi/src/babeltrace/src/lib/graph/graph.c:683
    683             BT_ASSERT_PRE_NO_ERROR();

See: https://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html

Simon


More information about the lttng-dev mailing list