How to get stack from every thread when doing crash dump?

Marcel Moolenaar marcel at xcllnt.net
Fri Jun 24 00:45:16 GMT 2005


On Jun 23, 2005, at 5:39 PM, Howard wrote:

> 2005/6/24, Marcel Moolenaar <marcel at xcllnt.net>: On Jun 23, 2005, at 
> 3:20 AM, Xin LI wrote:
>>
>> > One problem with the mini-dump is that, since the mini-dump 
>> utilizes:
>> >       dump_write((char *)curthread->td_kstack, 
>> curthread->td_kstack_pages *
>> > PAGE_SIZE);
>> >
>> > To write out the stack, and at the point before exception.S, 
>> curthread
>> > has
>> > been changed, we can only obtain the stack from the current thread,
>> > which
>> > may not be enough for analyzing the backtrace.  What can we do to
>> > improve
>> > this situation?
>>
>> You can iterate over all the threads. Take a look at
>>        src/sys/kern/subr_kdb.c
>> or
>>        src/gnu/usr.bin/gdb/kgdb/kthr.c
>>
>> In particular:
>> Use the list of all processes (allproc) to iterate over the
>> processeses and for each process walk the list of threads
>> and for each thread dump the stack, registers and other data. 
> However is dumping the td_kstack_pages enough to get one thread's 
> stack? We found the stack is not completed.

What do you mean with "not completed"?

-- 
  Marcel Moolenaar         USPA: A-39004          marcel at xcllnt.net



More information about the freebsd-arch mailing list