From owner-freebsd-hackers@FreeBSD.ORG Sat Sep 18 11:23:40 2010 Return-Path: Delivered-To: freebsd-hackers@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 559B2106566C for ; Sat, 18 Sep 2010 11:23:40 +0000 (UTC) (envelope-from avg@icyb.net.ua) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 9ADA68FC08 for ; Sat, 18 Sep 2010 11:23:39 +0000 (UTC) Received: from porto.topspin.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id OAA05606 for ; Sat, 18 Sep 2010 14:23:37 +0300 (EEST) (envelope-from avg@icyb.net.ua) Received: from localhost.topspin.kiev.ua ([127.0.0.1]) by porto.topspin.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1OwvW5-000CwJ-7j for freebsd-hackers@FreeBSD.org; Sat, 18 Sep 2010 14:23:37 +0300 Message-ID: <4C94A138.8050905@icyb.net.ua> Date: Sat, 18 Sep 2010 14:23:36 +0300 From: Andriy Gapon User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.9) Gecko/20100912 Lightning/1.0b2 Thunderbird/3.1.3 MIME-Version: 1.0 To: freebsd-hackers@FreeBSD.org X-Enigmail-Version: 1.1.2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: Subject: KDB_TRACE and no backend X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Sep 2010 11:23:40 -0000 Here's a small patch that adds support for printing stack trace in form of frame addresses when KDB_TRACE is enabled, but there is no debugger backend configured. The patch is styled after "cheap" variant of stack_ktr. What do you think (useful/useless, correct, etc) ? --- a/sys/kern/subr_kdb.c +++ b/sys/kern/subr_kdb.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -295,10 +296,16 @@ void kdb_backtrace(void) { + struct stack st; + int i; - if (kdb_dbbe != NULL && kdb_dbbe->dbbe_trace != NULL) { - printf("KDB: stack backtrace:\n"); + printf("KDB: stack backtrace:\n"); + if (kdb_dbbe != NULL && kdb_dbbe->dbbe_trace != NULL) kdb_dbbe->dbbe_trace(); + else { + stack_save(&st); + for (i = 0; i < st.depth; i++) + printf("#%d %p\n", i, (void*)(uintptr_t)st.pcs[i]); } } -- Andriy Gapon