From debbugs-submit-bounces@debbugs.gnu.org Tue Feb 22 23:09:47 2022 Received: (at submit) by debbugs.gnu.org; 23 Feb 2022 04:09:47 +0000 Received: from localhost ([127.0.0.1]:43374 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nMiyJ-00033K-2X for submit@debbugs.gnu.org; Tue, 22 Feb 2022 23:09:47 -0500 Received: from lists.gnu.org ([209.51.188.17]:44018) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nMiyH-00033C-KK for submit@debbugs.gnu.org; Tue, 22 Feb 2022 23:09:46 -0500 Received: from eggs.gnu.org ([209.51.188.92]:44122) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nMiyH-00077K-EB for bug-gnu-emacs@gnu.org; Tue, 22 Feb 2022 23:09:45 -0500 Received: from mout.web.de ([212.227.17.11]:50681) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nMiyE-0005Y9-6M for bug-gnu-emacs@gnu.org; Tue, 22 Feb 2022 23:09:45 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1645589380; bh=diTtU1tBsC73Obydl0MigqiAMWELzoZRDcranjH5Xkk=; h=X-UI-Sender-Class:From:To:Subject:Date; b=Na+G4HXKLxFkiPSdmI+CxbyfXg4mNJS8vHnBJwUmvfa3DttY2nExDUC28tghYdSmv UoiRXk9LH5RR6doFjRsxsYfQDnEc/KKGRI3YJ0+pUq3FJkIQUY6EwFwmemNHTECZ5H kMIv5Jgs5OmjO3mwLDmh5m6EDBGwX5PNPDr1wrlM= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from drachen.dragon ([84.60.174.212]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MIya8-1nh9Gj3WBu-00KUKA for ; Wed, 23 Feb 2022 05:09:39 +0100 From: Michael Heerdegen To: bug-gnu-emacs@gnu.org Subject: 29.0.50; Edebug: Jumping commands in recursive definitions Date: Wed, 23 Feb 2022 05:09:39 +0100 Message-ID: <87czjez0jg.fsf@web.de> MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:sEEij0xRfNHkeC8BOVQbIuq5TBxt0uKm2aqfDglKhenlHnB3W6I G2gq8RaNupgVFhfsux6QD1poKRQSv89Cd4osw6vg5qRfNKnpfnnIEXxWByGEuGldOFMY/qt BqJz0IMxspJs7x0HbIsvsW+0EHpqYv2z1251+T1v1NXTOi52xy0PynqTNqCNGPAf8apGaFW TIpXuwEP/eekvJGXAkbiQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:RgpBtXIcEdE=:A6wW5jCXrE4bLz2N6DXFx1 PTOCml3v8uldKpTn0WEMGOmqmqeAuhX2pw+LHi3tpmfv8BxZ0WCuaAXQymC4iAl/45A2KQQe8 0q9bXMUCc5EZ9q2Xf5HzcZQK4/Lsk4D2A+Pf9hDAkWw1/uBVvkMsVx8VLANLR6Lqq6+vvscV6 zoKGtYVUyz0Jkc1oaxy03v02kQqyy9mAQFCEMRhNuXoUu4mo55xHKtn2Tmlkacdroaj2Xx511 X/S3WKVYjEXctLDJocS62OK+nK5vGkkqWlrqpl6X2jNPrcWgNapdVh5uGP6EeFQ5eryauDSJc gcFarpxuBMAt0VizKfgpL5LoCeAZurwUUL0t1jKqDZzKATeHmEHaxhnGLLIXK3SFF20ezcrUH duroknKBOQ+80Q8EzbZLJ/l7RXp8BvMVq+I7pMKA54o5nMEymvX7SWxk905f9/WCNOCuAvOFD Quj25NZUVVXBixZvxxryYz1fnEtygpgDme10Gf3iEf4yuIOqjNUmCW5TbiIz5g3fpOuhVS96r h4/OpmJ9ZfA6DaUAO3kX33Nrw83CjWVDz0w+6c7HFNuL7YlJuAd69/UQg4jfcD63orSYHB5tw ZSVfGPFkTOdKchzmaYoX6SGZFOXyC8aGscK7Mm18I9KriJgJtBTqQ33iuF1hyxh4MmGVx/tb/ xKT76y6AxOtlFicwBcQ2yCDmLF1kyXOKjI/LP8sL4LDiViNN4oDeH+2AGurnRKXVrTgO3nAXJ mfFCp+n9Dke0yaCVLdeJZnttpuSBqaxFpfDlaQDixJwrsYD02wmc87XHDSxF65EPEC+fACmLD ASNIAziBgaomYlvExwlaPFKwQgmbC1sVcrV0RE0XFF/tid7eGsGpU+VMzH/i/1uMA/o9D1lk5 lf0VzDAmTOIVEPr/+0fEYKpESwTEljcldt32qj1iSRY6pEAb5NSfDBqQzzsaJnzAndgq+EYXF Bn/8oSDy98oCb04XYhinEfvBUvBDpIyqV931yJFhlJtSidUVQbSm3XATdcTr35lZ+BvLDRY+1 pfPpk1Xr8VnXWnKi65pZe1AlPU7ZjgTAyeVaJuPMFqVF8O+3YbZdrXruirr5AxTboOygGAbhz +cdDkYA0zqvs0I= Received-SPF: pass client-ip=212.227.17.11; envelope-from=michael_heerdegen@web.de; helo=mout.web.de X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, 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-Spam-Score: 0.2 (/) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.4 (--) Hello, the Edebug sexp jumping commands f and o can behave surprisingly (I would say annoyingly and wrong) when used near recursive calls of the current function. Let me demonstrate the problem with an example: Instrument #+begin_src emacs-lisp (defun my-factorial (n) (if (< n 2) 1 (* n (my-factorial (1- n))))) #+end_src ^ | M-: (my-factorial 5) RET and hit SPC until the cursor is before the front of the recursive call of `my-factorial' (as indicated). Hit f. You get "2" as result. This is quite unexpected, one would expect (my-factorial 4) ==> 24. What happened is that Edebug does not really "jump" over the following expression, it just sets a breakpoint after it and enters "go" mode. That breakpoint "breaks" the next time it is passed, and that is, in the above example, at the end of the innermost recursion, AFAIU. The same thing can happen with `o'. When that kind of thing happens, it can become a very tricky task to edebug what you wanted to. I don't know - can we make those "internal" breakpoints conditional and let the condition check the recursion level, somehow? Although, even then, some obscure kinds of code using catch and throw might still behave surprisingly. Edebug would somehow have to check that the jumped over execution frame terminates normally, or something like that. TIA, Michael. In GNU Emacs 29.0.50 (build 33, x86_64-pc-linux-gnu, GTK+ Version 3.24.24, cairo version 1.16.0) of 2022-02-23 built on drachen Repository revision: be7c8c79eb874e3297c8492b1363fb0b8c433fae Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12011000 System Description: Debian GNU/Linux 11 (bullseye) From debbugs-submit-bounces@debbugs.gnu.org Thu Feb 24 22:36:57 2022 Received: (at 54119) by debbugs.gnu.org; 25 Feb 2022 03:36:57 +0000 Received: from localhost ([127.0.0.1]:50962 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nNRPd-0001Zs-0j for submit@debbugs.gnu.org; Thu, 24 Feb 2022 22:36:57 -0500 Received: from mout.web.de ([212.227.15.14]:44179) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nNRPa-0001Zd-Uu for 54119@debbugs.gnu.org; Thu, 24 Feb 2022 22:36:55 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1645760208; bh=qabkPSi2IoH0JDhdKnI9RIB5ow0Ie76zEUax3BcWRtI=; h=X-UI-Sender-Class:From:To:Subject:References:Date:In-Reply-To; b=cyz/bcS/gi7M+XnsGhwWAjNIAhyGVUojfHP9+gWkd0t+ZKSzXPH94o8/uFL0KuOia WpL7Pia2w7HERXRLytPEh7kFusF2HvVsI0/d21rCqVsza/znsEfXdPTSxHGkJFvfqw +ZP1ejB3934evSTPpvAyn5Vz8/sQPBMtGClBXJBE= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from drachen.dragon ([84.60.174.212]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MTfon-1nmy5d2m7B-00TjWD for <54119@debbugs.gnu.org>; Fri, 25 Feb 2022 04:36:48 +0100 From: Michael Heerdegen To: 54119@debbugs.gnu.org Subject: Re: bug#54119: 29.0.50; Edebug: Jumping commands in recursive definitions References: <87czjez0jg.fsf@web.de> Date: Fri, 25 Feb 2022 04:36:47 +0100 In-Reply-To: <87czjez0jg.fsf@web.de> (Michael Heerdegen's message of "Wed, 23 Feb 2022 05:09:39 +0100") Message-ID: <8735k7ty5s.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:3cX4WPEabsEwDXr6XwCArwCcMKXMl47aEXQp9qFFMVdpDoMDNbr P52FWDX3cd4sqiTDdhrHl9J8QadG77gh4bQr0bzAt32HepSL494PByrcbGIq0sFN4xVBsZM ad88hePsEOYVVfGfnD//Nq6oJdZ/gheagpEDd9MZRwp2yi0OmLlgapLdEP78TF0fV907B4W MZc7vV2P4D+StXE03J7rQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:CDM+mmuK/YE=:kMcBcCEf2KEJWrRKVUnbkv 9V4BikC/yQKu9OsutjkeDTBIhJQ25MrFyFae65vmMzEo111jV8Nrzt0wdvSLG/FKa/GKmlT3u k4m9a3kvn495BgBx893tElVCpv933+FP6k8z+/QzWFPwi9C5SBzjCw2voKmC+91cGZTf5NHuZ vjeaYIdl/Zl58CR22q8KtWa5r+nzSQzgmHEk0hAFGdSiA8VsOQad1WHPmuOH6i7VLtSc82kXC qtSjzgFKW8pygR43QfQaIBCjSZdHifeT7gbArteqZhfbqFWcXW99BaygOeBLkBJ9FR4KcjCjf p/iE4SGDsw3cKPEuRI8hrQ7WfwbsAfyGr3LiSCTC3TUpR5lFz1jduqhGMpmY2q1gDAzCYV83n zkaKlTHMbKQqdzsJvjgiKqX84lLlFuMkzDgsm6RIsDwmxyiPUdbQyG1tZLlsKgqnntmdIj2z3 zI0W3IAENboxBvuQReIcGDt0cXNCWGy4p4iFeU51I9dwj1lZgYdW0kE6XxIcPX1UFIgtR+iOP UjcGJfXItOu282zX0bBUkin5QnFN4wIwQHiPsP6ctGKd8TP+5sLxwtdE9sj1EKnPoqjXN/j9c KGVq+4f+Hnhtbtpi4kx4RkbH2V4hQbZ3NcEXn3vV9IURdITO0Q+E9+uIbIA4Mlwmm30Q2Xd4J tOy8lv93mRzNWOmOvbMjHeS/qe/AsAYuDkdSflDxspI/h9yUQtI2scqvBRTqA7JB54invKCMx H0JmGo0H+fUKOU1qb9u/9qrdQ9g0JMO1k7DuONVF1bTsUXsgB+5L35FfG/vCg9zNdZ1a6X0Iz 9rAwo/SDx54JjavKOFgkOsbje5yiqXaVbTDIkKbyhyPPYWBbOBhLQ/R1lMSGfgOC3Tv0rZxeU 5ERX8VJYNWzDzhRC4Mqi12I2avNJwf0W6rclNak6XTOY+FxESISduVKD+Hz+aqB3E41K+AH7V ooBRaAdOlGYps+tQjalH/FGMNS9McnZPj05vlRf0H1nuWif2Ik2nAaY6vS5C9qAX6EV9swyC7 mN1RMGWEJG4bZzFpiiAqNRQBtVlFk3ctfZoh5+pWxRG2gJSKTiHeQCyFGoDLELa2iCoXdHo8v QGN6JI0zyBni1M= Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 54119 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Michael Heerdegen writes: > #+begin_src emacs-lisp > (defun my-factorial (n) (if (< n 2) 1 (* n (my-factorial (1- n))))) > #+end_src We could exploit the fact that the function is already instrumented. Every function call of the definition is then wrapped in an `edebug-after' call: #+begin_src emacs-lisp (symbol-function 'my-factorial) =3D=3D> (closure (t) (n) (edebug-enter 'my-factorial (list n) #'(lambda nil (edebug-after (edebug-before 0) 12 (if (edebug-after (edebug-before 1) 3 (< (edebug-after 0 2 n) 2)) 1 (edebug-after (edebug-before 4) 11 (* etc...))))))) #+end_src We could solve this bug if we temporarily change the function binding of `edebug-after'. This is a bit tricky, though, mainly because it's not trivial to restore the original setup: - two places must be updated: (symbol-function 'edebug-after) and the entry in `edebug-behavior-alist' - `edebug-forward-sexp' terminates immediately, it's on the "meta level", undoing the change in that function is too early, since we must expect recursive calls of `edebug-after'. - the actual code is evaluated as an argument of `edebug-after', so the replacement can also not restore the original function binding Which means: either we also redefine `edebug-before', or we use something very different. Here is a proof of concept using `post-command-hook' for restoring: #+begin_src emacs-lisp (defun my-edebug-forward-sexp--around-ad (f &rest args) (cl-macrolet ((after-fun () '(nth 2 (cdr (assq 'edebug edebug-behavior-alist))))) (let ((orig-after-fun (after-fun))) (cl-labels ((set-after-fun (f) (setf (symbol-function 'edebug-after) (setf (after-fun) f))) (reset-after-fun () (remove-hook 'post-command-hook #'reset-after-fun) (set-after-fun orig-after-fun))) (set-after-fun #'edebug-fast-after) (add-hook 'post-command-hook #'reset-after-fun) (apply f args))))) (advice-add 'edebug-forward-sexp :around #'my-edebug-forward-sexp--around-= ad) (advice-add 'edebug-step-out :around #'my-edebug-forward-sexp--around-= ad) #+end_src Seems to do the job. A patch would not need an advice of course. Better ideas welcome. Michael. From debbugs-submit-bounces@debbugs.gnu.org Fri Feb 25 23:21:09 2022 Received: (at 54119) by debbugs.gnu.org; 26 Feb 2022 04:21:09 +0000 Received: from localhost ([127.0.0.1]:54045 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nNoZx-00059M-8w for submit@debbugs.gnu.org; Fri, 25 Feb 2022 23:21:09 -0500 Received: from mout.web.de ([212.227.17.11]:53429) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nNoZs-00058Q-1F for 54119@debbugs.gnu.org; Fri, 25 Feb 2022 23:21:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1645849257; bh=rBpSvyXAltjESVHA6AmFOaTmzRcbn10LzSU9PDoajVw=; h=X-UI-Sender-Class:From:To:Subject:References:Date:In-Reply-To; b=c1pIUoBt6bAEvfUJh+sDiCX9ojjNWUciWDzGJ/N/1J0bHSfdl6nPXNI4pLr9jffqY 1qQ6K2Ms7QeAfH2jgZvMVPNR4f18iHPpT8hMB//nhiUMJaLfsMMKNA2WxsajXpLsNX DTm+9GI/ErCjaT661Yt4ZSpug1gFLDbOAmJG5Lkg= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from drachen.dragon ([84.60.174.212]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MjgSv-1o3hlC1p3j-00lDsM for <54119@debbugs.gnu.org>; Sat, 26 Feb 2022 05:20:57 +0100 From: Michael Heerdegen To: 54119@debbugs.gnu.org Subject: Re: bug#54119: 29.0.50; Edebug: Jumping commands in recursive definitions References: <87czjez0jg.fsf@web.de> <8735k7ty5s.fsf@web.de> Date: Sat, 26 Feb 2022 05:20:56 +0100 In-Reply-To: <8735k7ty5s.fsf@web.de> (Michael Heerdegen's message of "Fri, 25 Feb 2022 04:36:47 +0100") Message-ID: <87tucmp8bb.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K1:bV+OTe0mLtI1KZDx/GHMvpHS6zWtLyBmkZir+WP2JHTCU/wNw3n 7sB1GF23DRRfbXQTfpA3c/DM8ciydFlE9L59yVNgG1irapVPAijZbBHCMSId8gIZdXMvtVn 2tS9wYa69NyZ3FkiB2BO/SorohkitHOZn4cYg1QsCbic9+1zqTxjFBGC37L8immwo3ka25L EP7a9btmrXpHWFYKqcSlw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:Lytqd/cDVIA=:yHU6TXmzia+IeSVTiDheUH nVuHbXP2sc0ZTt6g5yHe7GHVFtGn0myZ/oLC92gs59rvntKmQ2M72Sung1ySkjKbD5ACrbIrh 8hEilQct78SIp1UAmA5NR/FZdCtHinVtHqF1XaO53jrNVciZ0tyOK8v9iRAUNXIZkTTrcTUKk J5KzXdHLYhD5qc2ft99R9aLe0VZPI+O77wUh+M5wdKaSO8jdvUZsMAknxezr2ws8ZcACAF7u1 Eg/8wSfrdIqWQ53GJDKmyYye11uTwxSa56eopxCKk2iCGKU1KyH/io1BlcZOCWXauX455UnP8 /CC6eIVwQ2WJLdfs9dzI5L8fRp60zbzSsgZ3qE6SuCXBCYEcwrYbOYPB0CtzJrPo1EF6clCc0 fagGuUDSwYq9mj2YvNmZxbaGv/aFCbODLiCenu70NHiKyzOkzeK5/hjpASHExy85UEFuWETd7 RfuoemNH61bgnxwu3KiSj5BFWWVaFRdWK4nnpD07oT4IyBbXtZ2PGhzUdBuZCrJmBxoYAkOwi 2zhW8hymm9G9DleDjWqTrXLZ5We6BUHnar9Q2j5MJvSzl0PLDrDYc7bWzhpEkvCl0ioYr6sAx VBJ7/5pdtpp33qp0US+cwvAyhdbgndW2yqZgh3teS/bhFFldwV0yr+siYqKLMcPA8IZfq5q8q s7OapnVDX1+pWJgDT95+6+cxwTdvP1v+jIdpUKnsDcBQwmZr5O0cpc86wlijLqfiFqBx6UTKS QiBFOP4R+q21WFYY9zxESuV8YaRAgiCyPKKc2CJ0pOVVsFmaDRu3QzHnNFhegY3CWcX9uQseO ZwO3EiAdEyFQxu61UCkWKPwIJ24pS+55UVRwK1LgOrDWBTSUc8jKNqMo5magRtyRMKV1SiMWp FXMNUgdTsE7qguJ4R5XrXypFZ/Y1mg4gTGiZ+xkbRWx9xlbqnmQjfQloglR6Jw2vYJvmkPgWd nHjsz77oa62rx1CyPg2nGUjgqXHkaTTFvPVPrhhtRMRxnJdTPu83embVsoh2QYUsewUo5wOeI AwJ5H9I8Gh0RdW2tj33eLtqqHoEGHlsLczX6zKIyBe3ncwvEraO7I52Q/h2fWAVoKNwEuEC9r YOoEHMM4k4Eb7U= X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 54119 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Michael Heerdegen writes: > Seems to do the job. Let me add: if you wonder why I don't just add a new variable and make the behavior of `edebug-slow-after' depend on the value, and then just change the binding in `edebug-forward-sexp': that would not work because it would also change the behavior of the outer `edebug-slow-after' calls "we are already in". We would get more or less go-nonstop: everything would unwind up to the top. Remember: we can't just let-bind that variable since we are in a recursive edit and the jumping commands immediately terminate. We can only set it, and then edebug just goes nonstop. My approach only works because the "outer" `edebug-slow-after' calls are unaffected and still stop. So I think must we must mess with function bindings - or use a different approach. Michael.