Re: how to dump kernel function trace in freebsd

From: Robert Watson <rwatson_at_FreeBSD.org>
Date: Thu, 5 Mar 2009 18:32:28 +0000 (GMT)
On Thu, 5 Mar 2009, George Kumar wrote:

> In Linux I could use dump_stack() this to see how a function was called - 
> (In essence stack trace back ),
>
> Function() {
> dump_stack();
> .....
> ...
> }
> What is the equivalent to dump_stack() in freebsd ?
>
> Is it kdb_backtrace() ? But for this I need to have kdb, ddb and kdb_trace 
> options in the config file ? is that correct ?

For debugging purposes, kdb_backtrace() is the preferred interface, and as you 
point out, it depends on the kernel debugger being present.

For more general (read: production) use, you can also capture, print, and 
generally manage stack traces using the stack(9) kernel interfaces.  This 
requires "options STACK" to be in the kernel configuration, but this is the 
default in 7.x and 8.x as it is required for procstat's -k command line option 
to work (which allows userspace to print out kernel stacks without using the 
kernel debugger).  You can print stack traces to the console, print them to 
sbuf's to be used elsewhere, etc.  Keep in mind that you'll want to resolve 
the symbols (using a string conversion function) fairly soon after the stack 
is captured so that symbol names in kernel modules are resolved before there's 
an opportunity for the module to be unloaded.

Robert N M Watson
Computer Laboratory
University of Cambridge
Received on Thu Mar 05 2009 - 17:32:29 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:43 UTC