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

Reply via email to