unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Jim Porter <jporterbugs@gmail.com>
To: emacs-devel@gnu.org
Subject: [PATCH] Fix M-x gdb when debugging over Tramp
Date: Wed, 7 Apr 2021 16:14:35 -0700	[thread overview]
Message-ID: <CANh=_JHtPinyHe2sHHUOG199nmof-7EJO97rc=GP_TX1YStCKg@mail.gmail.com> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 1095 bytes --]

Here's a pair of patches (one against the latest git revision, and one
against the emacs-27 branch) to fix debugging via M-x gdb over Tramp. There
were two problems:

1) In `gdb-jsonify-buffer', when replacing the "fullname" with a Tramp
path, the wildcard was greedy, resulting in only one "fullname" being
replaced. This had the effect of rendering it impossible to have more than
one breakpoint, as all but the first breakpoint would have unmodified
"fullname"s. This fix isn't needed for Emacs 28, since `gdb-jsonify-buffer'
was replaced with a more-accurate parser for GDB/MI.

2) In `gdb-frame-handler', `gdb-selected-file' needs to be the *local* file
path, since that's what `gud-last-frame' expects. Without this, the overlay
arrow for the current line in the source buffer won't show.

I've been running with these patches for a few months locally and haven't
found any further issues. Note that I haven't filled out copyright
assignment papers, but these patches are very small, so my understanding is
that's not necessary. If you'd like me to fill them out, just let me know.

- Jim

[-- Attachment #1.2: Type: text/html, Size: 1318 bytes --]

[-- Attachment #2: 0001-Emacs27-Fix-GDB-MI-usage-when-debugging-over-Tramp.patch --]
[-- Type: application/octet-stream, Size: 1668 bytes --]

From 5e11ec4362c6b56466477536ac1229ee2b8b8fcc Mon Sep 17 00:00:00 2001
From: Jim Porter <jporterbugs@gmail.com>
Date: Wed, 7 Apr 2021 15:55:15 -0700
Subject: [PATCH] Fix GDB/MI usage when debugging over Tramp

* lisp/progmodes/gdb-mi.el (gdb-jsonify-buffer): Fix modification of
GDB/MI "fullname" property for remote files
(gdb-frame-handler): Use local part of file name when setting
`gud-last-frame'.
---
 lisp/progmodes/gdb-mi.el | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 65fe997341..51a237a38e 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -2696,7 +2696,7 @@ If `default-directory' is remote, full file names are adapted accordingly."
     (let ((remote (file-remote-p default-directory)))
       (when remote
         (goto-char (point-min))
-        (while (re-search-forward "[\\[,]fullname=\"\\(.+\\)\"" nil t)
+        (while (re-search-forward "[\\[,]fullname=\"\\(.+?\\)\"" nil t)
           (replace-match (concat remote "\\1") nil nil nil 1))))
     (goto-char (point-min))
     (when fix-key
@@ -4376,7 +4376,7 @@ overlay arrow in source buffer."
   (let ((frame (bindat-get-field (gdb-json-partial-output) 'frame)))
     (when frame
       (setq gdb-selected-frame (bindat-get-field frame 'func))
-      (setq gdb-selected-file (bindat-get-field frame 'fullname))
+      (setq gdb-selected-file (file-local-name (bindat-get-field frame 'fullname)))
       (setq gdb-frame-number (bindat-get-field frame 'level))
       (setq gdb-frame-address (bindat-get-field frame 'addr))
       (let ((line (bindat-get-field frame 'line)))
-- 
2.25.1


[-- Attachment #3: 0001-Emacs28-Fix-GUD-overlay-arrows-in-gdb-mi-when-debugging-over.patch --]
[-- Type: application/octet-stream, Size: 1107 bytes --]

From a3e4dee36559382067e511335137c4f6349120e9 Mon Sep 17 00:00:00 2001
From: Jim Porter <jporterbugs@gmail.com>
Date: Wed, 7 Apr 2021 15:43:27 -0700
Subject: [PATCH] Fix GUD overlay arrows in gdb-mi when debugging over Tramp

* lisp/progmodes/gdb-mi.el (gdb-frame-handler): Use local part of
file name when setting `gud-last-frame'.
---
 lisp/progmodes/gdb-mi.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 1a96755bcf..8e6ce3d269 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -4512,7 +4512,7 @@ overlay arrow in source buffer."
   (let ((frame (gdb-mi--field (gdb-mi--partial-output) 'frame)))
     (when frame
       (setq gdb-selected-frame (gdb-mi--field frame 'func))
-      (setq gdb-selected-file (gdb-mi--field frame 'fullname))
+      (setq gdb-selected-file (file-local-name (gdb-mi--field frame 'fullname)))
       (setq gdb-frame-number (gdb-mi--field frame 'level))
       (setq gdb-frame-address (gdb-mi--field frame 'addr))
       (let ((line (gdb-mi--field frame 'line)))
-- 
2.25.1


             reply	other threads:[~2021-04-07 23:14 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-07 23:14 Jim Porter [this message]
2021-04-08 12:58 ` [PATCH] Fix M-x gdb when debugging over Tramp Michael Albinus
2021-04-15  5:02   ` Jim Porter
2021-04-15  7:55     ` Michael Albinus
2021-04-16  5:03       ` Jim Porter
2021-05-01  4:13         ` Jim Porter
2021-05-01 10:18           ` Michael Albinus
2021-04-19 11:55   ` William Xu
2021-04-19 12:44     ` Michael Albinus

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='CANh=_JHtPinyHe2sHHUOG199nmof-7EJO97rc=GP_TX1YStCKg@mail.gmail.com' \
    --to=jporterbugs@gmail.com \
    --cc=emacs-devel@gnu.org \
    /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).