<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2015-03-05 17:39 GMT-05:00 Brian Robbins <span dir="ltr"><<a href="mailto:brianrob@microsoft.com" target="_blank">brianrob@microsoft.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">





<div lang="EN-US" link="#0563C1" vlink="#954F72">
<div>
<p class="MsoNormal">Hello,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I’m looking into using the userspace tracing capabilities of LTTng, and I wanted to find out if it is possible to capture a stack backtrace when a userspace tracepoint is hit.</p></div></div></blockquote><div><br></div><div><br></div><div>The simple way is to use a tracepoint, where there is an array of addresses. Symbols resolution can be done offline using the baddr events indicating the address of shared libraries, and using libdwarf to parse ELF. </div><div><br></div><div>To get the actual backtrace, you can use either frame pointers, but most linux distributions compiles with -fomit-frame-pointers, and then this method does not work (even of your own program is compiled with -fno-omit-frame-pointer, a shared library, like libc, without frame pointer in the middle of the stack does break the frame chain). Then, stack unwind (using libunwind for instance) is necessary. </div><div><br></div><div>It could be nice to add such feature an event context to lttng-ust, it would allow to record the ELF callstack for any userspace event. The question is whether doing the unwind online (but it is quite costly in time), or do it offline, like perf is doing, by recording 2 pages of the stack with registers (but records much more data, and may not work if there are large variables on the stack, and requires additional support for JIT code). </div><div><br></div><div>Cheers,<br></div><div><br></div><div>Francis</div></div></div></div>