From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: New(?) idea for making backtraces usable: condition-case* Date: Mon, 17 Jul 2023 13:52:20 +0000 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="18937"; mail-complaints-to="usenet@ciao.gmane.io" To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Jul 17 15:53:26 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qLOfF-0004o5-De for ged-emacs-devel@m.gmane-mx.org; Mon, 17 Jul 2023 15:53:25 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qLOeN-00008D-DC; Mon, 17 Jul 2023 09:52:31 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qLOeK-0008Vy-NK for emacs-devel@gnu.org; Mon, 17 Jul 2023 09:52:28 -0400 Original-Received: from mx3.muc.de ([193.149.48.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qLOeG-00035I-VR for emacs-devel@gnu.org; Mon, 17 Jul 2023 09:52:27 -0400 Original-Received: (qmail 68095 invoked by uid 3782); 17 Jul 2023 15:52:21 +0200 Original-Received: from acm.muc.de (p4fe15519.dip0.t-ipconnect.de [79.225.85.25]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Mon, 17 Jul 2023 15:52:20 +0200 Original-Received: (qmail 8231 invoked by uid 1000); 17 Jul 2023 13:52:20 -0000 Content-Disposition: inline X-Submission-Agent: TMDA/1.3.x (Ph3nix) X-Primary-Address: acm@muc.de Received-SPF: pass client-ip=193.149.48.5; envelope-from=acm@muc.de; helo=mx3.muc.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:307932 Archived-At: Hello, Emacs. condition-case's are an unfortunate fact of Emacs life - Typically, when a signal is signalled to indicate a bug in the called code, the condition case unavoidably discards the most useful part of the backtrace. This conundrum gave rise (I think) to bug #50629 "hard to debug an uncaught error with ert" raised by Mike Kupfer on 2021-09-16. My idea here is to write a new special form, condition-case*. This would behave the same as condition-case unless a signal is signalled. In that case the error handler forms would evaluate _before_ the specpdl gets unwound. This unwinding would take place on exiting an error handler in the form. The unwinding would NOT happen if the error handler is exited with, say, signal. This would give nested condition-case*'s the chance to output a full backtrace. In the event of generating a backtrace, the entire stack at the point of failure would get output. Possibly, a new function unwind-stack might be needed, so that an error handler can unwind the stack explicitly. I haven't thought this through, yet. The implementation should be relatively straightforward, extending the existing mechanisms in eval.c. Once it's working, large numbers of condition-case's could be replaced by condition-case*, easing large amounts of debugging. What do people think? -- Alan Mackenzie (Nuremberg, Germany)