[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r106210: * lisp/progmodes/gdb-mi.el:
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r106210: * lisp/progmodes/gdb-mi.el: Warn the user when -i=mi is missing. |
Date: |
Thu, 27 Oct 2011 22:22:38 -0400 |
User-agent: |
Bazaar (2.3.1) |
------------------------------------------------------------
revno: 106210
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Thu 2011-10-27 22:22:38 -0400
message:
* lisp/progmodes/gdb-mi.el: Warn the user when -i=mi is missing.
(gdb--check-interpreter): New function.
(gdb): Use it.
modified:
lisp/ChangeLog
lisp/progmodes/gdb-mi.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2011-10-27 07:21:00 +0000
+++ b/lisp/ChangeLog 2011-10-28 02:22:38 +0000
@@ -1,3 +1,9 @@
+2011-10-28 Stefan Monnier <address@hidden>
+
+ * progmodes/gdb-mi.el: Warn the user when -i=mi is missing.
+ (gdb--check-interpreter): New function.
+ (gdb): Use it.
+
2011-10-27 Glenn Morris <address@hidden>
* emacs-lisp/cl-extra.el (most-positive-float, most-negative-float)
@@ -21,8 +27,8 @@
* subr.el (change-major-mode-after-body-hook): New hook.
(run-mode-hooks): Run it.
- * emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Use
- change-major-mode-before-body-hook.
+ * emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
+ Use change-major-mode-before-body-hook.
* simple.el (fundamental-mode):
* emacs-lisp/derived.el (define-derived-mode): Revert 2010-04-28
=== modified file 'lisp/progmodes/gdb-mi.el'
--- a/lisp/progmodes/gdb-mi.el 2011-10-06 16:11:38 +0000
+++ b/lisp/progmodes/gdb-mi.el 2011-10-28 02:22:38 +0000
@@ -43,21 +43,10 @@
;; M-x gdb will start the debugger.
-;; This file uses GDB/MI as the primary interface to GDB. It is still under
-;; development and is part of a process to migrate Emacs from annotations (as
-;; used in gdb-ui.el) to GDB/MI. It runs gdb with GDB/MI (-interp=mi) and
-;; access CLI using "-interpreter-exec console cli-command". This code works
-;; without gdb-ui.el and uses MI tokens instead of queues. Eventually MI
-;; should be asynchronous.
-
-;; This mode will PARTLY WORK WITH RECENT GDB RELEASES (status in modeline
-;; doesn't update properly when execution commands are issued from GUD buffer)
-;; and WORKS BEST when GDB runs asynchronously: maint set linux-async on.
-;;
-;; You need development version of GDB 7.0 for the thread buffer to work.
-
-;; This file replaces gdb-ui.el and is for development with GDB. Use the
-;; release branch of Emacs 22 for the latest version of gdb-ui.el.
+;; This file uses GDB/MI as the primary interface to GDB. It runs gdb with
+;; GDB/MI (-interp=mi) and access CLI using "-interpreter-exec console
+;; cli-command". This code works without gdb-ui.el and uses MI tokens instead
+;; of queues. Eventually MI should be asynchronous.
;; Windows Platforms:
@@ -599,6 +588,22 @@
(concat (gdb-gud-context-command ,cmd1 ,noall) " " ,cmd2)
,(when (not noarg) 'arg)))
+(defun gdb--check-interpreter (proc string)
+ (unless (zerop (length string))
+ (let ((filter (process-get proc 'gud-normal-filter)))
+ (set-process-filter proc filter)
+ (unless (memq (aref string 0) '(?^ ?~ ?@ ?& ?* ?=))
+ ;; Apparently we're not running with -i=mi.
+ (let ((msg "Error: you did not specify -i=mi on GDB's command line!"))
+ (message msg)
+ (setq string (concat (propertize msg 'font-lock-face 'error)
+ "\n" string)))
+ ;; Use the old gud-gbd filter, not because it works, but because it
+ ;; will properly display GDB's answers rather than hanging waiting for
+ ;; answers that aren't coming.
+ (set (make-local-variable 'gud-marker-filter) #'gud-gdb-marker-filter))
+ (funcall filter proc string))))
+
;;;###autoload
(defun gdb (command-line)
"Run gdb on program FILE in buffer *gud-FILE*.
@@ -665,6 +670,13 @@
"Multiple debugging requires restarting in text command mode"))
;;
(gud-common-init command-line nil 'gud-gdbmi-marker-filter)
+
+ ;; Setup a temporary process filter to warn when GDB was not started
+ ;; with -i=mi.
+ (let ((proc (get-buffer-process gud-comint-buffer)))
+ (process-put proc 'gud-normal-filter (process-filter proc))
+ (set-process-filter proc #'gdb--check-interpreter))
+
(set (make-local-variable 'gud-minor-mode) 'gdbmi)
(setq comint-input-sender 'gdb-send)
(when (ring-empty-p comint-input-ring) ; cf shell-mode
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r106210: * lisp/progmodes/gdb-mi.el: Warn the user when -i=mi is missing.,
Stefan Monnier <=