Help using elfutils to get function and line number

Frank Ch. Eigler fche at redhat.com
Mon Mar 16 14:25:59 UTC 2009


Hi -

> I am writing an application which involves obtaining a backtrace, so
> I tried to find an easy way to get the backtrace for the running
>  program. I used the glibc backtrace() function to get the return
> addresses from the stack. However, I need to convert those addresses
> into meaningful information (such as function name, file name and
> line number). I tried to use the addr2line code, but ran into
> problems when using dynamically loaded libraries, because the
> addresses (the one returned by backtrace(), and the actual address
> in the library -- the one returned by gdb, for instance) didn't
> match.

No offline debuginfo parser library can perform this address mapping
by itself since the shared library address data is only available at
run time.  When you store your backtrace() output, you should also
store your shared library address map (e.g. /proc/self/maps).  With
all that information available, elfutils can let you work with such
addresses to get correct debuginfo address matching.  One has to be
aware that there are several additive/subtractive mappings in play
(and some of them have buggy implementations in some versions of
elfutils) so getting it just right is tricky.

- FChE


More information about the elfutils-devel mailing list