[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Libunwind-devel] Unwinding and inline functions
From: |
Milian Wolff |
Subject: |
[Libunwind-devel] Unwinding and inline functions |
Date: |
Tue, 31 May 2016 11:27:46 +0200 |
User-agent: |
KMail/5.2.66 (Linux/4.5.4-1-ARCH; KDE/5.22.0; x86_64; git-f93c931; 2016-05-24) |
Hey all,
Can libunwind be configured to include "fake" frames from debug information in
the face of inlined functions? Meaning for code like this:
~~~~
#define forceinline inline __attribute__((always_inline))
forceinline void asdf()
{
new int[123];
}
forceinline void bar()
{
asdf();
}
forceinline void foo()
{
bar();
}
int main()
{
foo();
return 0;
}
~~~~
If I now use my heaptrack tool to grab a backtrace with libunwind on the
memory allocation, I'll see the following for an optimized build:
g++ -O3 -flto -ggdb3 inlining.cpp
main
at /home/milian/projects/src/heaptrack/tests/manual/inlining.cpp:20
in /ssd/milian/projects/build/heaptrack/a.out
GDB is capable of giving me a much more useful backtrace:
~~~~
Breakpoint 3, 0x00007ffff720f180 in malloc () from /usr/lib/libc.so.6
(gdb) bt
#0 0x00007ffff720f180 in malloc () from /usr/lib/libc.so.6
#1 0x00007ffff7ae1968 in operator new (sz=492) at /build/gcc-multilib/src/
gcc/libstdc++-v3/libsupc++/new_op.cc:50
#2 0x000000000040050e in asdf () at /home/milian/projects/src/heaptrack/
tests/manual/inlining.cpp:5
#3 bar () at /home/milian/projects/src/heaptrack/tests/manual/inlining.cpp:10
#4 foo () at /home/milian/projects/src/heaptrack/tests/manual/inlining.cpp:15
#5 main () at /home/milian/projects/src/heaptrack/tests/manual/inlining.cpp:
20
~~~~
Can I configure libunwind to give me an equivalent backtrace? If not, does
someone know if the unwinding method of GDB is accessible to third-parties as
a library?
Thanks
--
Milian Wolff
address@hidden
http://milianw.de
- [Libunwind-devel] Unwinding and inline functions,
Milian Wolff <=