GNU bug report logs - #74294
Master: debug-on-error is ineffective whilst requiring a file from the byte compiler.

Previous Next

Package: emacs;

Reported by: Alan Mackenzie <acm <at> muc.de>

Date: Sun, 10 Nov 2024 13:06:02 UTC

Severity: normal

Full log


Message #8 received at 74294 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 74294 <at> debbugs.gnu.org
Subject: Re: bug#74294: Master: debug-on-error is ineffective whilst
 requiring a file from the byte compiler.
Date: Sun, 10 Nov 2024 12:31:46 -0500
> Create the following files:
>
> 1: ~/test-byte-compile-errors.el:
> #########################################################################
> ;; -*- lexical-binding:t -*-
> (require 'test-byte-compile-errors-2 "~/test-byte-compile-errors-2")
> #########################################################################
>
> 2: ~/test-byte-compile-errors-2.el:
> #########################################################################
> ;; -*- lexical-binding:t -*-
> (car 'baz)
>
> (provide 'test-byte-compile-errors-2)
> #########################################################################
>
> (Note the erroneous (car 'baz) in this file.)
>
> (i) emacs -Q
> (ii) M-: (setq debug-on-error t) RET
> (iii) M-x byte-compile-file RET ~/test-byte-compile-errors.el RET
>
> (iv) The error message:
>
>     test-byte-compile-errors.el:2:11: Error: Wrong type argument: listp, baz
>
> is displayed.  The debugger is not run.  This is surely a bug.
>
> (Note also, the file name displayed is not that where the error is: See
> bug#66912.)
>
> #########################################################################
>
> Diagnosis
> ---------
>
> In the function bytecomp--displaying-warnings (bytecomp.el), a blocking
> condition-case is set up, except when byte-compile-debug is non-nil.
> This prevents the debugger running.  The problem is, the effect of this
> condition-case prevails even outside the byte compiler whilst loading a
> file with `require'.

Hmm... whether it's "outside the byte compiler" or not is debatable.
[ FWIW, I've been annoyed by the behavior as well, but just decided to set
  `byte-compile-debug` to t in my init file, and life is bliss since then.  ]

> Set up one or more handler-binds around the parts of Fload that evaluate
> the contents of the file being loaded.  In the event of an error, the
> handler-bind handler would trigger, test debug-on-error, and if it's set
> appropriately, call the debugger, then quit.  Otherwise, the handler
> would return, and the error handling would eventually reach the
> condition-case set up by bytecomp--displaying-warnings.

Is the problem specific to `load`, really?
What about errors within `eval-when-compile` or during the expansion of
one of the macros?

Also, do you really want to bring up the debugger in cases like

    (eval-when-compile
      (condition-case nil
          (require ...)
        (error ...)))

which I've seen used in a few packages out there?


        Stefan





This bug report was last modified 219 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.