cvs commit: src/sys/alpha/alpha db_trace.c src/sys/arm/arm
db_trace.c src/sys/conf files src/sys/i386/i386 db_trace.c src/sys/ia64/ia64
db_trace.c src/sys/kern subr_stack.c src/sys/powerpc/powerpc db_trace.c
src/sys/sparc64/sparc64 ...
Robert Watson
rwatson at FreeBSD.org
Wed Aug 3 17:19:05 GMT 2005
On Wed, 3 Aug 2005, Andrew Gallatin wrote:
>>> Added files:
>>> sys/kern subr_stack.c
>>> sys/sys stack.h
>>> Log:
>>> - Add support for saving stack traces and displaying them via printf(9)
>>> and KTR.
>>>
>>> Contributed by: Antoine Brodin <antoine.brodin at laposte.net>
>>> Concept code from: Neal Fachan <neal at isilon.com>
>>
>> This sounds really great. I have a local
>> /usr/src/sys/kern/kern_utrace.c for back-tracing user application
>> stacks that I find quite useful -- I wonder if we could extend this to
>> also work with user thread stacks? It can be quite handy for
>> determining how an application reached a particularly obscure kernel
>> state. It doesn't do the ELF magic, but does reach into VM to
>> determine what object+offset backs each page pointed to by a return
>> address.
>
> How close is your kern_utrace.c to something that could be used to make
> a (MacOSX like) crashreporterd deamon which saves application stack
> traces when an application crashes?
Probably not very close. I've primarily used it for console-based
debugging. Basically, at the machine-specific layer, all I provide is
utrace_first_frame() and utrace_next_frame(), which return a series of
struct utrace_frame structures, from which f_retaddr can be extracted. I
don't have the magic in place currently to allow tracing of non-current
threads, although I've futzed with it in the past.
Then at the machine-independent layer, I have two high-level functions -
user_stacktrace() and user_stacktrace_withmappings(), one of which prints
out just the addresses returned by the MD layer, and the other which adds
the VM wrapping magic that converts addresses into vnode+offset.
All of this is pretty specific to my environment and requirements, but it
might be a starting point for something better. What's missing is the
nice cushy infrastructure, bundling of the trace data into useful blobs,
etc. I would like very much to see all this but haven't had time to
follow up.
Robert N M Watson
More information about the cvs-src
mailing list