[lttng-dev] Debugging Libaries in Babeltrace 2

Philippe Proulx eeppeliteloop at gmail.com
Wed Oct 25 10:50:54 EDT 2023


On Wed, Oct 25, 2023 at 3:29 AM Seidl, Aron via lttng-dev
<lttng-dev at lists.lttng.org> wrote:
>
> 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.

Note that you can also install the project locally:

    $ BABELTRACE_DEV_MODE=1 BABELTRACE_MINIMAL_LOG_LEVEL=TRACE \
      BABELTRACE_DEBUG_MODE=1 CFLAGS='-g -O0' CPPFLAGS='-g -O0' \
      ./configure --prefix=$PWD/install

Make sure to run `make install`.

Then `$PWD/install/bin/babeltrace2` is fully installed and independent
and will load the correct libbabeltrace2 because it has
`$PWD/install/lib` as its runpath.

You may debug as usual:

    $ gdb --args ./install/bin/babeltrace2 [...]

Philippe

> 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
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev


More information about the lttng-dev mailing list