From: Michael Heerdegen <michael_heerdegen@web.de>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: Stefan Monnier <monnier@iro.umontreal.ca>, 38195@debbugs.gnu.org
Subject: bug#38195: 27.0.50; `edebug-remove-instrumentation' doesn't work for adviced functions
Date: Tue, 26 Nov 2019 22:01:32 +0100 [thread overview]
Message-ID: <87a78iuzbn.fsf@web.de> (raw)
In-Reply-To: <877e3t78l5.fsf@web.de> (Michael Heerdegen's message of "Thu, 21 Nov 2019 12:49:26 +0100")
[-- Attachment #1: Type: text/plain, Size: 378 bytes --]
Michael Heerdegen <michael_heerdegen@web.de> writes:
> BTW, I also wonder if we should enhance the command
> `edebug-remove-instrumentation' so that it is able to reload source
> files. It could look at the SYMOL's `symbol-file's, collect these, load
> the files, and only do what it does now for the symbols that are still
> wrapped.
Here is a draft. Any thoughts (Lars)?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-WIP-edebug-see-38195-ask-whether-to-reload-files-to-.patch --]
[-- Type: text/x-diff, Size: 4366 bytes --]
From 681370954b2f5168e6e0793a9a7ded76db671682 Mon Sep 17 00:00:00 2001
From: Michael Heerdegen <michael_heerdegen@web.de>
Date: Tue, 26 Nov 2019 19:23:45 +0100
Subject: [PATCH] WIP: edebug: see 38195, ask whether to reload files to
deinstrument
---
lisp/emacs-lisp/edebug.el | 73 ++++++++++++++++++++++++++++++---------
1 file changed, 57 insertions(+), 16 deletions(-)
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index d68ed966f8..29bb27fc0d 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -4586,36 +4586,77 @@ edebug--unwrap*-symbol-function
(was-macro `(macro . ,unwrapped))
(t unwrapped))))))
+(defcustom edebug-reload-files 'ask
+ "Whether `edebug-remove-instrumentation' should reload files.
+
+When non-nil, `edebug-remove-instrumentation' will reload files
+where possible to get rid of instrumentation. When the non-nil
+value is the symbol 'ask, ask for every individual file before
+loading it.
+
+When nil or when no defining file can be found remove edebug
+instrumentation by manipulating symbol functions."
+ :type '(choice (const :tag "On" t)
+ (const :tag "Ask for every file" ask)
+ (const :tag "Off" nil)))
+
+(defun edebug-get-instrumented-functions ()
+ (let ((functions '()))
+ (mapatoms
+ (lambda (symbol)
+ (when (and (get symbol 'edebug)
+ (or (functionp symbol)
+ (macrop symbol))
+ (edebug--unwrap*-symbol-function
+ symbol))
+ (push symbol functions)))
+ obarray)
+ functions))
+
(defun edebug-remove-instrumentation (functions)
"Remove Edebug instrumentation from FUNCTIONS.
Interactively, the user is prompted for the function to remove
instrumentation for, defaulting to all functions."
(interactive
(list
- (let ((functions nil))
- (mapatoms
- (lambda (symbol)
- (when (and (get symbol 'edebug)
- (or (functionp symbol)
- (macrop symbol))
- (edebug--unwrap*-symbol-function
- symbol))
- (push symbol functions)))
- obarray)
+ (let ((functions (edebug-get-instrumented-functions)))
(unless functions
(error "Found no functions to remove instrumentation from"))
(let ((name
(completing-read
"Remove instrumentation from (default all functions): "
functions)))
- (if (and name
- (not (equal name "")))
+ (if (and name (not (equal name "")))
(list (intern name))
- functions)))))
- ;; Remove instrumentation.
+ t)))))
+ (unless (listp functions)
+ (setq functions (edebug-get-instrumented-functions)))
+ (when edebug-reload-files
+ (let ((files '()))
+ (dolist (f functions)
+ (when-let ((file (symbol-file f 'defun)))
+ (unless (cl-some (apply-partially #'file-equal-p file) files)
+ (push file files))))
+ (let ((do-all (eq edebug-reload-files t))
+ file)
+ (while files
+ (setq file (pop files))
+ (when (or do-all
+ (pcase (car (read-multiple-choice
+ (format "Load %s ?" file)
+ (list (list ?y "y" "Reload this file")
+ (list ?Y "Y" "\
+Reload this and all following files")
+ (list ?n "n" "Don't load this file")
+ (list ?N "N" "\
+Don't load this and any following files"))))
+ (?y t)
+ (?Y (setq do-all t) t)
+ (?n nil)
+ (?N (setq files nil) nil)))
+ (load file 'noerror nil 'nosuffix))))))
(dolist (symbol functions)
- (when-let ((unwrapped
- (edebug--unwrap*-symbol-function symbol)))
+ (when-let ((unwrapped (edebug--unwrap*-symbol-function symbol)))
(defalias symbol unwrapped)))
(message "Removed edebug instrumentation from %s"
(mapconcat #'symbol-name functions ", ")))
--
2.24.0
[-- Attachment #3: Type: text/plain, Size: 21 bytes --]
Regards,
Michael.
next prev parent reply other threads:[~2019-11-26 21:01 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-13 13:55 bug#38195: 27.0.50; `edebug-remove-instrumentation' doesn't work for adviced functions Michael Heerdegen
2019-11-14 5:20 ` Lars Ingebrigtsen
2019-11-14 16:51 ` Michael Heerdegen
2019-11-14 22:39 ` Michael Heerdegen
2019-11-15 7:57 ` Lars Ingebrigtsen
2019-11-15 12:39 ` Michael Heerdegen
2019-11-16 4:28 ` Lars Ingebrigtsen
2019-11-16 12:25 ` Michael Heerdegen
2019-11-14 16:55 ` Michael Heerdegen
2019-11-14 19:08 ` Stefan Monnier
2019-11-14 20:27 ` Michael Heerdegen
2019-11-14 21:33 ` Stefan Monnier
2019-11-15 13:54 ` Michael Heerdegen
2019-11-15 17:30 ` Stefan Monnier
2019-11-17 12:35 ` Michael Heerdegen
2019-11-17 12:55 ` Michael Heerdegen
2019-11-17 16:04 ` Stefan Monnier
2019-11-21 11:49 ` Michael Heerdegen
2019-11-23 13:32 ` Michael Heerdegen
2019-11-26 21:01 ` Michael Heerdegen [this message]
2019-11-27 12:17 ` Lars Ingebrigtsen
2020-09-20 10:54 ` Lars Ingebrigtsen
2019-11-14 21:15 ` Michael Heerdegen
2019-11-15 8:03 ` Lars Ingebrigtsen
2019-11-15 12:11 ` Michael Heerdegen
2019-11-15 12:15 ` Lars Ingebrigtsen
2019-11-15 12:34 ` Michael Heerdegen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87a78iuzbn.fsf@web.de \
--to=michael_heerdegen@web.de \
--cc=38195@debbugs.gnu.org \
--cc=larsi@gnus.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).