# HG changeset patch # User Nick Roberts # Date 1085875777 0 # Node ID 63ca25eb73a17637c93f7630b6ba926d8635c2b3 # Parent cca0c09bd2fb6bbceb8ba464e19c1fc896852241 (gdb-current-frame, gud-watch) (gdb-locals-mode, gdb-frame-handler): Display current frame in the modeline of the locals buffer. (gdb-goto-breakpoint): Handle gdbmi. (gdb-get-frame-number): Change for gdbmi. diff -r cca0c09bd2fb -r 63ca25eb73a1 lisp/progmodes/gdb-ui.el --- a/lisp/progmodes/gdb-ui.el Sun May 30 00:07:12 2004 +0000 +++ b/lisp/progmodes/gdb-ui.el Sun May 30 00:09:37 2004 +0000 @@ -40,8 +40,15 @@ ;; Kingdon and uses GDB's annotation interface. You don't need to know about ;; annotations to use this mode as a debugger, but if you are interested ;; developing the mode itself, then see the Annotations section in the GDB -;; info manual. Some GDB/MI commands are also used through th CLI command -;; 'interpreter mi '. +;; info manual. +;; +;; GDB developers plan to make the annotation interface obsolete. A new +;; interface called GDB/MI (machine interface) has been designed to replace +;; it. Some GDB/MI commands are used in this file through the CLI command +;; 'interpreter mi '. A file called gdb-mi.el is included in the +;; GDB repository for future releases (6.2 onwards) that 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 to GDB/MI. ;; ;; Known Bugs: ;; @@ -53,7 +60,7 @@ (defvar gdb-current-address "main" "Initialisation for Assembler buffer.") (defvar gdb-previous-address nil) (defvar gdb-previous-frame nil) -(defvar gdb-current-frame "main") +(defvar gdb-current-frame nil) (defvar gdb-current-language nil) (defvar gdb-view-source t "Non-nil means that source code can be viewed.") (defvar gdb-selected-view 'source "Code type that user wishes to view.") @@ -175,7 +182,7 @@ (setq gdb-current-address "main") (setq gdb-previous-address nil) (setq gdb-previous-frame nil) - (setq gdb-current-frame "main") + (setq gdb-current-frame nil) (setq gdb-view-source t) (setq gdb-selected-view 'source) (setq gdb-var-list nil) @@ -214,7 +221,7 @@ (require 'tooltip) (let ((expr (tooltip-identifier-from-point (point)))) (if (and (string-equal gdb-current-language "c") - gdb-use-colon-colon-notation) + gdb-use-colon-colon-notation gdb-current-frame) (setq expr (concat gdb-current-frame "::" expr))) (catch 'already-watched (dolist (var gdb-var-list) @@ -1219,8 +1226,10 @@ (interactive) (save-excursion (beginning-of-line 1) - (re-search-forward "in\\s-+\\S-+\\s-+at\\s-+" nil t) - (looking-at "\\(\\S-*\\):\\([0-9]+\\)")) + (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdbmi)) + (looking-at "[0-9]*\\s-*\\S-*\\s-*\\S-*\\s-*.\\s-*\\S-*\\s-*\\(\\S-*\\):\\([0-9]+\\)") + (re-search-forward "in\\s-+\\S-+\\s-+at\\s-+" nil t) + (looking-at "\\(\\S-*\\):\\([0-9]+\\)"))) (if (match-string 2) (let ((line (match-string 2)) (file (match-string 1))) @@ -1311,7 +1320,7 @@ (defun gdb-get-frame-number () (save-excursion - (let* ((pos (re-search-backward "^#\\([0-9]*\\)" nil t)) + (let* ((pos (re-search-backward "^#*\\([0-9]*\\)" nil t)) (n (or (and pos (match-string-no-properties 1)) "0"))) n))) @@ -1502,7 +1511,7 @@ \\{gdb-locals-mode-map}" (setq major-mode 'gdb-locals-mode) - (setq mode-name "Locals") + (setq mode-name (concat "Locals:" gdb-current-frame)) (setq buffer-read-only t) (use-local-map gdb-locals-mode-map) (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) @@ -1999,6 +2008,9 @@ (if (looking-at ".*=\\s-+0x\\(\\S-*\\)\\s-+in\\s-+\\(\\S-*?\\);? ") (progn (setq gdb-current-frame (match-string 2)) + (if (gdb-get-buffer 'gdb-locals-buffer) + (with-current-buffer (gdb-get-buffer 'gdb-locals-buffer) + (setq mode-name (concat "Locals:" gdb-current-frame)))) (let ((address (match-string 1))) ;; remove leading 0s from output of info frame command. (if (string-match "^0+\\(.*\\)" address)