From: Wang Diancheng <dianchengwang@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: luangruo@yahoo.com, 64186@debbugs.gnu.org
Subject: bug#64186: Patch: Suppress deprecated '-gdb-set target-async' warning message in gdb-mi.el
Date: Wed, 28 Jun 2023 11:51:39 +0800 [thread overview]
Message-ID: <CADmgXh6_0LsQfvLp-xAZckvmj_dD0k8KTcS1VjtHTgsht=dWGg@mail.gmail.com> (raw)
In-Reply-To: <83wmzx3qoj.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 1197 bytes --]
Hi,
Eli Zaretskii <eliz@gnu.org> 于2023年6月21日周三 21:12写道:
>
> merge 64186 63084
> thanks
>
> > From: Wang Diancheng <dianchengwang@gmail.com>
> > Date: Wed, 21 Jun 2023 14:49:01 +0800
> > Cc: luangruo@yahoo.com, 64186@debbugs.gnu.org
> >
> > Eli Zaretskii <eliz@gnu.org> 于2023年6月20日周二 19:55写道:
> > >
> > > Given all that mess, I wonder if "M-x gdb" in its current shape indeed
> > > supports the asynchronous execution. If it doesn't, we may be better
> > > off not sending that command at all for now, until bug#63084 is fixed.
> >
> > Yes, I agree. Currently gdb-mi doesn't actually support asynchronous
> > execution because of bug#63084. Before it is fixed, to suppress the
> > annoying warning, we can set gdb-non-stop-setting to nil as a
> > workaround.
>
> Thanks, I've now done so on the emacs-29 branch. I will leave this
> bug open (and merge it to bug#63084), so that they could be fixed in
> the future, hopefully not too distant future.
I did some hacks to make gdb-non-stop work, patch is attached. The
patch try to set `gdb-non-stop` when target is running or at first
stop. Sorry for rough patch. I'm new for elisp.
[-- Attachment #2: gdb-mi-support-non-stop.patch --]
[-- Type: text/x-patch, Size: 4599 bytes --]
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index c9afe502a50..62645a54244 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -237,6 +237,7 @@ gdb-handler-list
(defvar gdb-source-file-list nil
"List of source files for the current executable.")
(defvar gdb-first-done-or-error t)
+(defvar gdb-target-async-checked nil)
(defvar gdb-source-window-list nil
"List of windows used for displaying source files.
Sorted in most-recently-visited-first order.")
@@ -453,9 +454,7 @@ gdb-debug-log-max
(const :tag "Unlimited" nil))
:version "22.1")
-;; This is disabled by default because we don't really support
-;; asynchronous execution of the debuggee; see bug#63084. FIXME.
-(defcustom gdb-non-stop-setting nil
+(defcustom gdb-non-stop-setting (not (eq system-type 'windows-nt))
"If non-nil, GDB sessions are expected to support the non-stop mode.
When in the non-stop mode, stopped threads can be examined while
other threads continue to execute.
@@ -470,7 +469,7 @@ gdb-non-stop-setting
GDB session needs to be restarted for this setting to take effect."
:type 'boolean
:group 'gdb-non-stop
- :version "29.1")
+ :version "30.1")
(defcustom gdb-debuginfod-enable-setting
;; debuginfod servers are only for ELF executables, and elfutils, of
@@ -1069,6 +1068,7 @@ gdb-init-1
gdb-handler-list '()
gdb-prompt-name nil
gdb-first-done-or-error t
+ gdb-target-async-checked nil
gdb-buffer-fringe-width (car (window-fringes))
gdb-debug-log nil
gdb-source-window-list nil
@@ -1078,7 +1078,8 @@ gdb-init-1
gdb-threads-list '()
gdb-breakpoints-list '()
gdb-register-names '()
- gdb-non-stop gdb-non-stop-setting
+ gdb-supports-non-stop nil
+ gdb-non-stop nil
gdb-debuginfod-enable gdb-debuginfod-enable-setting)
;;
(gdbmi-bnf-init)
@@ -1110,7 +1111,7 @@ gdb-init-1
(gdb-input "-gdb-set interactive-mode on" 'ignore))
(gdb-input "-gdb-set height 0" 'ignore)
- (when gdb-non-stop
+ (when gdb-non-stop-setting
(gdb-input "-gdb-set non-stop 1" 'gdb-non-stop-handler))
(gdb-input "-enable-pretty-printing" 'ignore)
@@ -1145,16 +1146,30 @@ gdb-non-stop-handler
(setq gdb-non-stop nil)
(setq gdb-supports-non-stop nil))
(setq gdb-supports-non-stop t)
- (gdb-input "-gdb-set target-async 1" 'ignore)
+ ;; Try to use "mi-async" first, needs GDB 7.7 onwards. Note if
+ ;; "mi-async" is not available, GDB is still running in "sync"
+ ;; mode, "No symbol" for "mi-async" must appear before other
+ ;; commands.
+ (gdb-input "-gdb-set mi-async 1" 'gdb-set-mi-async-handler)))
+
+(defun gdb-set-mi-async-handler()
+ (goto-char (point-min))
+ (if (re-search-forward "No symbol" nil t)
+ (gdb-input "-gdb-set target-async 1" 'ignore)))
+
+(defun gdb-try-check-target-async-support()
+ (when (and gdb-non-stop-setting gdb-supports-non-stop
+ (not gdb-target-async-checked))
(gdb-input "-list-target-features" 'gdb-check-target-async)))
(defun gdb-check-target-async ()
(goto-char (point-min))
- (unless (re-search-forward "async" nil t)
+ (if (re-search-forward "async" nil t)
+ (setq gdb-non-stop t)
(message
"Target doesn't support non-stop mode. Turning it off.")
- (setq gdb-non-stop nil)
- (gdb-input "-gdb-set non-stop 0" 'ignore)))
+ (gdb-input "-gdb-set non-stop 0" 'ignore))
+ (setq gdb-target-async-checked t))
(defun gdb-delchar-or-quit (arg)
"Delete ARG characters or send a quit command to GDB.
@@ -2652,6 +2667,13 @@ gdb-running
(defun gdb-starting (_output-field _result)
;; CLI commands don't emit ^running at the moment so use gdb-running too.
(setq gdb-inferior-status "running")
+
+ ;; Set `gdb-non-stop` when `gdb-last-command` is a CLI background
+ ;; `run` command e.g. r& or MI command `-exec-run`
+ (when (or (string-match "&\s*$" gdb-last-command)
+ (string-match "-exec-run" gdb-last-command))
+ (gdb-try-check-target-async-support))
+
(gdb-force-mode-line-update
(propertize gdb-inferior-status 'face font-lock-type-face))
(setq gdb-active-process t)
@@ -2722,6 +2744,9 @@ gdb-stopped
;; Print "(gdb)" to GUD console
(when gdb-first-done-or-error
+ ;; If run target with CLI foreground command `run`, `target
+ ;; async` can only be checked when target is stopped
+ (gdb-try-check-target-async-support)
(setq gdb-filter-output (concat gdb-filter-output gdb-prompt-name)))
;; In non-stop, we update information as soon as another thread gets
next prev parent reply other threads:[~2023-06-28 3:51 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-20 2:21 bug#64186: Patch: Suppress deprecated '-gdb-set target-async' warning message in gdb-mi.el Wang Diancheng
2023-06-20 7:24 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-06-20 9:25 ` Wang Diancheng
2023-06-20 9:43 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-06-20 11:55 ` Eli Zaretskii
2023-06-21 6:49 ` Wang Diancheng
2023-06-21 13:12 ` Eli Zaretskii
2023-06-28 3:51 ` Wang Diancheng [this message]
2023-06-29 6:09 ` Eli Zaretskii
2023-06-30 7:08 ` Wang Diancheng
2023-07-06 7:10 ` Eli Zaretskii
2023-04-25 19:18 ` bug#63084: 30.0.50; gud: set breakpoint while program is running tatrics
2023-04-26 6:10 ` Eli Zaretskii
2023-04-26 8:48 ` TatriX
2023-04-26 9:44 ` Eli Zaretskii
2023-04-26 11:19 ` Eli Zaretskii
2023-04-26 11:49 ` TatriX
2023-05-05 5:52 ` Eli Zaretskii
2023-05-05 5:53 ` Eli Zaretskii
2023-05-05 7:15 ` TatriX
2023-05-06 11:43 ` Eli Zaretskii
2023-05-27 21:22 ` TatriX
2023-05-28 5:28 ` Eli Zaretskii
2023-05-28 21:10 ` TatriX
2023-05-29 11:45 ` Eli Zaretskii
[not found] ` <handler.63084.D64186.168862741914107.notifdone@debbugs.gnu.org>
2023-07-11 7:31 ` bug#63084: closed (Re: bug#64186: Patch: Suppress deprecated '-gdb-set target-async' warning message in gdb-mi.el) TatriX
2023-07-11 12:24 ` Eli Zaretskii
2023-07-11 15:30 ` TatriX
2023-07-11 15:56 ` Eli Zaretskii
2023-07-11 17:49 ` TatriX
2023-07-13 6:26 ` Eli Zaretskii
2023-07-07 6:25 ` bug#64186: Patch: Suppress deprecated '-gdb-set target-async' warning message in gdb-mi.el Wang Diancheng
2023-07-07 6:42 ` Eli Zaretskii
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='CADmgXh6_0LsQfvLp-xAZckvmj_dD0k8KTcS1VjtHTgsht=dWGg@mail.gmail.com' \
--to=dianchengwang@gmail.com \
--cc=64186@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=luangruo@yahoo.com \
/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).