Re: Yet another crash in FreeBSD 5.1

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Sun, 03 Aug 2003 00:31:45 -0400 (EDT)
On 03-Aug-2003 Greg 'groggy' Lehey wrote:
> On Saturday,  2 August 2003 at 16:47:13 +0200, Eivind Olsen wrote:
>> --On 2. august 2003 02:11 -0700 Terry Lambert <tlambert2_at_mindspring.com>
>> wrote:
>>>> db> trace
>>>> g_dev_strategy(c2156024,c2153800,0,cfb528d0,c2099eca) at
>>>> g_dev_strategy+0x29 launch_requests(c299bf00,0,10000,ffffffff,47) at
>>>> launch_requests+0x448 vinumstart(c5ada2d0,0,c22ab000,cfb5294c,c02e5bc6)
>>>> at vinumstart+0x2b2
>>> gdb -k kernel.debug
>>> (gdb) list *(g_dev_strategy+29)
>>> [ ... ]
>>> (gdb) list *(launch_requests+448)
>>> [ ... ]
>>> (gdb) list *(vinumstart+2b2)
>>> [ ... ]
>>> Will give you the exact source lines involved, assuming you
>>> built a debug kernel.
>>
>> I did. At least I've tried to. :)
>> (I have a kernel.debug which was compiled at the same time as the real
>> kernel I'm using, and it's approx. 30MB in size).
>>
>>> You don't actually need a crash dump to debug a stack traceback.
>>
>> This is what I found by using those commands you mentioned:
>>
>> eivind_at_vimes:~/tmp/debug > gdb -k kernel.debug
>> GNU gdb 5.2.1 (FreeBSD)
>> Copyright 2002 Free Software Foundation, Inc.
>> GDB is free software, covered by the GNU General Public License, and you are
>> welcome to change it and/or distribute copies of it under certain
>> conditions.
>> Type "show copying" to see the conditions.
>> There is absolutely no warranty for GDB.  Type "show warranty" for details.
>> This GDB was configured as "i386-undermydesk-freebsd"...
>> (kgdb) list *(g_dev_strategy+29)
> 
> This is almost certainly the wrong function.  At the very list you
> should look at the arguments passed to it.

Actually, this line can be very instructive.  Since 'bp' is valid
it is probably the bp2 from g_clone_bio() that is NULL.  You might
want to ask phk about that one.

>> (kgdb) list *(launch_requests+448)
>> No symbol "launch_requests" in current context.
>> (kgdb) list *(vinumstart+2b2)
>> No symbol "vinumstart" in current context.
>> (kgdb)
> 
> Read the links I just sent you.  You haven't loaded the Vinum symbols.

Bah, this isn't hard for you to do either:

(gdb) l *(launch_requests+0x448)
0xad58 is in launch_requests (/usr/src/sys/dev/vinum/vinumrequest.c:448).
443                         microtime(&rqe->launchtime);            /* time we launched this
request */
444                         logrq(loginfo_rqe, (union rqinfou) rqe, rq->bp);
445                     }
446     #endif
447                     /* fire off the request */
448                     DEV_STRATEGY(&rqe->b);
449                 }
450             }
451         }
452         return 0;

But you knew that.  Also, Eivind, you need to use hex, not decimal
offsets from the functions.  You might want to redo the g_dev_strategy()
line with 0x29 instead of 29.

-- 

John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/
Received on Sat Aug 02 2003 - 19:31:28 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:17 UTC