GNU bug report logs -
#65612
gdb-mi non-stop mode can not set breakpoints when `gud-running' is t
Previous Next
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 65612 in the body.
You can then email your comments to 65612 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#65612
; Package
emacs
.
(Wed, 30 Aug 2023 07:19:04 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Diancheng Wang <diancheng_wang <at> 163.com>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Wed, 30 Aug 2023 07:19:05 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Hi,
When gdb-mi is running in non-stop mode (both `gud-running' and
`gdb-non-stop' are t), it can not set breakpoints using `gud-break'
function. But at the same situation, we can set breakpoints using gdb
CLI commands in gdb interactive buffer.
Attached patch fixed this bug. The patch introduces a gud new variable:
`gud-async-running'. The marco `gud-def' still sends command to gdb if
`gud-async-running' is t even `gud-running' is t.
[0001-gdb-mi.el-Enable-to-set-breakpoints-even-all-threads.patch (text/x-diff, inline)]
From 717ab9c933308a1222844c0b4cca5c4c93f7ff4a Mon Sep 17 00:00:00 2001
From: Diancheng Wang <diancheng <at> gmail.com>
Date: Wed, 9 Aug 2023 10:35:12 +0800
Subject: [PATCH] gdb-mi.el: Enable to set breakpoints even all threads of
debugee are running.
---
lisp/progmodes/gdb-mi.el | 17 ++++++++++-------
lisp/progmodes/gud.el | 22 ++++++++++++++--------
2 files changed, 24 insertions(+), 15 deletions(-)
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index a1091de43e9..58629773974 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -928,7 +928,7 @@ gdb
(setq-local comint-input-ring-file-name hfile))
(comint-read-input-ring t)))
(gud-def gud-tbreak "tbreak %f:%l" "\C-t"
- "Set temporary breakpoint at current line.")
+ "Set temporary breakpoint at current line." t)
(gud-def gud-jump
(progn (gud-call "tbreak %f:%l" arg) (gud-call "jump %f:%l"))
"\C-j" "Set execution address to current line.")
@@ -959,7 +959,7 @@ gdb
"Finish executing current function.")
(gud-def gud-run "-exec-run"
nil
- "Run the program.")
+ "Run the program." t)
(gud-def gud-break (if (not (string-match "Disassembly" mode-name))
(gud-call "break %f:%l" arg)
@@ -967,7 +967,7 @@ gdb
(beginning-of-line)
(forward-char 2)
(gud-call "break *%a" arg)))
- "\C-b" "Set breakpoint at current line or address.")
+ "\C-b" "Set breakpoint at current line or address." t)
(gud-def gud-remove (if (not (string-match "Disassembly" mode-name))
(gud-call "clear %f:%l" arg)
@@ -975,7 +975,7 @@ gdb
(beginning-of-line)
(forward-char 2)
(gud-call "clear *%a" arg)))
- "\C-d" "Remove breakpoint at current line or address.")
+ "\C-d" "Remove breakpoint at current line or address." t)
;; -exec-until doesn't support --all yet
(gud-def gud-until (if (not (string-match "Disassembly" mode-name))
@@ -1044,6 +1044,7 @@ gdb
(setq gdb-first-prompt t)
(setq gud-running nil)
+ (setq gud-async-running nil)
(gdb-update)
@@ -2671,9 +2672,11 @@ gdb-starting
;; Set `gdb-non-stop' when `gdb-last-command' is a CLI background
;; running command e.g. "run &", attach &" or a MI command
;; e.g. "-exec-run" or "-exec-attach".
- (when (or (string-match "&\s*$" gdb-last-command)
- (string-match "^-" gdb-last-command))
- (gdb-try-check-target-async-support))
+ (if (or (string-match "&\s*$" gdb-last-command)
+ (string-match "^-" gdb-last-command))
+ (progn (gdb-try-check-target-async-support)
+ (setq gud-async-running t))
+ (setq gud-async-running nil))
(gdb-force-mode-line-update
(propertize gdb-inferior-status 'face font-lock-type-face))
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 09860a4cbde..3cc63aab84f 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -128,6 +128,10 @@ gud-running
"Non-nil if debugged program is running.
Used to gray out relevant toolbar icons.")
+(defvar gud-async-running nil
+ "Non-nil if debugged program is running in async mode.
+Check it when `gud-running' is t")
+
(defvar gud-target-name "--unknown--"
"The apparent name of the program being debugged in a gud buffer.")
@@ -261,13 +265,13 @@ gud-menu-map
:visible (memq gud-minor-mode
'(gdbmi gdb guiler dbx xdb jdb pdb))]
["Set Breakpoint" gud-break
- :enable (not gud-running)
+ :enable (or (not gud-running) gud-async-running)
:visible (gud-tool-bar-item-visible-no-fringe)]
["Temporary Breakpoint" gud-tbreak
- :enable (not gud-running)
+ :enable (or (not gud-running) gud-async-running)
:visible (memq gud-minor-mode '(gdbmi gdb sdb xdb))]
["Remove Breakpoint" gud-remove
- :enable (not gud-running)
+ :enable (or (not gud-running) gud-async-running)
:visible (gud-tool-bar-item-visible-no-fringe)]
["Continue to selection" gud-until
:enable (not gud-running)
@@ -283,7 +287,7 @@ gud-menu-map
:visible (and (eq gud-minor-mode 'gdbmi)
(gdb-show-run-p))]
["Run" gud-run
- :enable (not gud-running)
+ :enable (or (not gud-running) gud-async-running)
:visible (or (memq gud-minor-mode '(gdb dbx jdb))
(and (eq gud-minor-mode 'gdbmi)
(or (not (gdb-show-run-p))
@@ -403,13 +407,15 @@ gud-find-file
;; Of course you may use `gud-def' with any other debugger command, including
;; user defined ones.
-;; A macro call like (gud-def FUNC CMD KEY DOC) expands to a form
+;; A macro call like (gud-def FUNC CMD KEY DOC ASYNC-OK) expands to a form
;; which defines FUNC to send the command CMD to the debugger, gives
;; it the docstring DOC, and binds that function to KEY in the GUD
-;; major mode. The function is also bound in the global keymap with the
+;; major mode. The FUNC still sends CMD when both ASYNC-OK and
+;; `gud-async-running' are t even `gud-running' is t.
+;; The function is also bound in the global keymap with the
;; GUD prefix.
-(defmacro gud-def (func cmd key &optional doc)
+(defmacro gud-def (func cmd key &optional doc async-ok)
"Define FUNC to be a command sending CMD and bound to KEY, with
optional doc string DOC. Certain %-escapes in the string arguments
are interpreted specially if present. These are:
@@ -434,7 +440,7 @@ gud-def
(defalias ',func (lambda (arg)
,@(if doc (list doc))
(interactive "p")
- (if (not gud-running)
+ (if (or (not gud-running) (and ,async-ok gud-async-running))
,(if (stringp cmd)
`(gud-call ,cmd arg)
;; Unused lexical warning if cmd does not use "arg".
--
2.27.0
Reply sent
to
Eli Zaretskii <eliz <at> gnu.org>
:
You have taken responsibility.
(Thu, 31 Aug 2023 10:14:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
Diancheng Wang <diancheng_wang <at> 163.com>
:
bug acknowledged by developer.
(Thu, 31 Aug 2023 10:14:02 GMT)
Full text and
rfc822 format available.
Message #10 received at 65612-done <at> debbugs.gnu.org (full text, mbox):
> From: Diancheng Wang <diancheng_wang <at> 163.com>
> Date: Wed, 30 Aug 2023 10:15:01 +0800
>
> When gdb-mi is running in non-stop mode (both `gud-running' and
> `gdb-non-stop' are t), it can not set breakpoints using `gud-break'
> function. But at the same situation, we can set breakpoints using gdb
> CLI commands in gdb interactive buffer.
>
> Attached patch fixed this bug. The patch introduces a gud new variable:
> `gud-async-running'. The marco `gud-def' still sends command to gdb if
> `gud-async-running' is t even `gud-running' is t.
Thanks, installed on the master branch and closing the bug.
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Thu, 28 Sep 2023 11:24:06 GMT)
Full text and
rfc822 format available.
This bug report was last modified 1 year and 225 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.