Re: how to dump kernel function trace in freebsd

From: Marius Nünnerich <marius_at_nuenneri.ch>
Date: Thu, 5 Mar 2009 21:00:23 +0100
On Thu, Mar 5, 2009 at 19:32, Robert Watson <rwatson_at_freebsd.org> wrote:
> 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.

As said in the forums a fairly elegant solution is to use DTrace for
this task. Just add a SDT probe to the code in question and use
stack() in your DTrace script. Maybe the FBT provider already provides
an appropriate probe so you don't even need to add a SDT probe.
Received on Thu Mar 05 2009 - 19:00:25 UTC

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