From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 31308 invoked from network); 12 Mar 2023 04:24:05 -0000 Received: from minnie.tuhs.org (50.116.15.146) by inbox.vuxu.org with ESMTPUTF8; 12 Mar 2023 04:24:05 -0000 Received: from minnie.tuhs.org (localhost [IPv6:::1]) by minnie.tuhs.org (Postfix) with ESMTP id D01E041275; Sun, 12 Mar 2023 14:24:02 +1000 (AEST) Received: from outgoing.mit.edu (outgoing-auth-1.mit.edu [18.9.28.11]) by minnie.tuhs.org (Postfix) with ESMTPS id EC8BB4120F for ; Sun, 12 Mar 2023 14:23:56 +1000 (AEST) Received: from cwcc.thunk.org (pool-173-48-120-46.bstnma.fios.verizon.net [173.48.120.46]) (authenticated bits=0) (User authenticated as tytso@ATHENA.MIT.EDU) by outgoing.mit.edu (8.14.7/8.12.4) with ESMTP id 32C4Nmid024786 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 11 Mar 2023 23:23:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mit.edu; s=outgoing; t=1678595030; bh=01yZb40tZ27APM8KYMQ5cum9PfjPWLljgLazQvOhFDo=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=E3UXBT1+hEijkmviaMs1T5ftI0uKuFWZLCtefSEfX0/Z/nHlG0BdjBgO8KGkobk+V it4b8OljMmlKyQt0/B698ANBjU4ZNdhmRiyHPX2n20kjdsQQ0bHQjnQBH8tA91jFH9 xeg2+zKMOpDDII/ePHo6j/NeGIOa6ETdUs/+xk/sUQeu1R/gZnxZU18suKNW2JMnMl U/nU/ikiiCvVp6tJgRfF/6ihDbHP5lzPxJaeFSrDDhbRRXe7Wqi33auCLJGKjO1oPu qdpHt070GzM3mqJugy9OZ2PpZZLD3mhNVRqVtP6qo8AXzkqD4blYJAlRhHVhexv9Qf sFvtVjqFrm9HQ== Received: by cwcc.thunk.org (Postfix, from userid 15806) id B262415C45B9; Sat, 11 Mar 2023 23:23:48 -0500 (EST) Date: Sat, 11 Mar 2023 23:23:48 -0500 From: "Theodore Ts'o" To: Ralph Corderoy Message-ID: <20230312042348.GJ860405@mit.edu> References: <69248852-1701-4938-8A4D-3B27F3018E83@iitbombay.org> <20230310174222.GB9225@mcvoy.com> <20230311112849.22C0920145@orac.inputplus.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230311112849.22C0920145@orac.inputplus.co.uk> Message-ID-Hash: YITOXQDYIDRXMY4MFMVQXHJGUIYFNECD X-Message-ID-Hash: YITOXQDYIDRXMY4MFMVQXHJGUIYFNECD X-MailFrom: tytso@mit.edu X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: coff@tuhs.org X-Mailman-Version: 3.3.6b1 Precedence: list Subject: [COFF] Re: Conditions, AKA exceptions. List-Id: Computer Old Farts Forum Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: On Sat, Mar 11, 2023 at 11:28:49AM +0000, Ralph Corderoy wrote: > Hi Larry, > > > cmd = aprintf("gdb -batch -ex backtrace '%s/bk' %u 1>&%d 2>&%d", > > bin, getpid(), fileno(f), fileno(f)); > > > > system(cmd); > > I also came up with this, probably on an SGI Iris Indigo, and got it > added to the Unix Programming FAQ. :-) > > 6.5 How can I generate a stack dump from within a running program? > http://www.faqs.org/faqs/unix-faq/programmer/faq/ > > It works surprisingly often, i.e. the process is healthy enough to run > system(3). On Linux (or some other system using glibc) a limited facility is built into the C library. So you can just do somthing like this: { void *stack_syms[32]; int frames; frames = backtrace(stack_syms, 32); backtrace_symbols_fd(stack_syms, frames, 2); } This is convenient if you want a stack trace, but the binary might be on a rescue floppy which doesn't have space for gdb, or the user might not have gdb installed. I use this for the fsck for ext4, and the nice thing is that even with a stripped binary. For example: Signal (7) SIGBUS (sent from pid 4261) si_code=SI_USER e2fsck(+0x36691)[0x564da1ed2691] /lib/x86_64-linux-gnu/libc.so.6(+0x3bf90)[0x7f6e21c0bf90] /lib/x86_64-linux-gnu/libc.so.6(read+0xd)[0x7f6e21cc80ed] e2fsck(ask_yn+0x1de)[0x564da1ec90de] e2fsck(fix_problem+0xfc0)[0x564da1ecc7b0] e2fsck(+0x235b3)[0x564da1ebf5b3] e2fsck(+0x252d3)[0x564da1ec12d3] /lib/x86_64-linux-gnu/libext2fs.so.2(ext2fs_dblist_iterate3+0x5f)[0x7f6e21e430cf] e2fsck(e2fsck_pass2+0x18b)[0x564da1ebdd7b] e2fsck(e2fsck_run+0x5a)[0x564da1eb0c3a] e2fsck(main+0x16cb)[0x564da1eacdbb] /lib/x86_64-linux-gnu/libc.so.6(+0x2718a)[0x7f6e21bf718a] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x85)[0x7f6e21bf7245] e2fsck(_start+0x21)[0x564da1eaefc1] For more information see: https://github.com/tytso/e2fsprogs/blob/master/e2fsck/sigcatcher.c#L379 - Ted