4.3. User-Space Stack Backtraces
The probe point (pp
) function indicates which
particular event triggered the SystemTap event handler.
A probe on the entry into a function would list the function name.
However, in many cases the same probe point event may be triggered by
many different modules in the program; this is particularly true for
functions in shared libraries. A SystemTap backtrace of the user-space
stack can provide additional context on how the probe point event is
triggered.
The user-space stack backtrace generation is complicated
by the compiler producing code optimized to eliminate stack frame
pointers.
However, the compiler also includes information in the debug information
section to allow debugging tools to produce stack backtraces.
SystemTap user-space stack backtrace mechanism makes use of that
debug information to walk the stack to generate stack traces for 32-bit
and 64-bit x86 processors; other processor architectures do not yet
support the use of debug information to unwind the user-space stack.
To ensure that the needed debug information is used to produce the
user-space stack backtraces, use the
-d executable
option for
executables and --ldd
for shared libraries.
For example, you can use the user-space backtrack functions to see how
the xmalloc
function is
being called by the ls
command. With the
debuginfo for the ls
command installed, the following
SystemTap command provides a backtrace each time the
xmalloc
function is called:
stap -d /bin/ls --ldd \
-e 'probe process("ls").function("xmalloc") {print_usyms(ubacktrace())}' \
-c "ls /"
When executed, this command produces output similar to the following:
bin dev lib media net proc sbin sys var
boot etc lib64 misc op_session profilerc selinux tmp
cgroup home lost+found mnt opt root srv usr
0x4116c0 : xmalloc+0x0/0x20 [/bin/ls]
0x4116fc : xmemdup+0x1c/0x40 [/bin/ls]
0x40e68b : clone_quoting_options+0x3b/0x50 [/bin/ls]
0x4087e4 : main+0x3b4/0x1900 [/bin/ls]
0x3fa441ec5d : __libc_start_main+0xfd/0x1d0 [/lib64/libc-2.12.so]
0x402799 : _start+0x29/0x2c [/bin/ls]
0x4116c0 : xmalloc+0x0/0x20 [/bin/ls]
0x4116fc : xmemdup+0x1c/0x40 [/bin/ls]
0x40e68b : clone_quoting_options+0x3b/0x50 [/bin/ls]
0x40884a : main+0x41a/0x1900 [/bin/ls]
0x3fa441ec5d : __libc_start_main+0xfd/0x1d0 [/lib64/libc-2.12.so]
...
For more details on the functions available for user-space stack
backtraces, refer to ucontext-symbols.stp
and
ucontext-unwind.stp
tapsets. You can also find
the description of the functions in the aforementioned tapsets in the
SystemTap Tapset Reference Manual.