comparison lisp/progmodes/gdb-ui.el @ 68864:47f77ab239fc

(gud-watch, gdb-invalidate-registers-1) (gdb-get-changed-registers): Test value of gud-minor-mode relative to gud-comint-buffer. (gdb-speedbar-expand-node, gdb-locals-mode): Use functions in gdb-ui.el for gdb-mi.el. (gdb-post-prompt, gdb-get-changed-registers): Move test for registers buffer to gdb-get-changed-registers. (gdb-breakpoint-regexp): New regexp. Allow toggling and deletion of catchpoints (throw and catch). (gdb-toggle-breakpoint, gdb-delete-breakpoint) (gdb-goto-breakpoint): Use it for both gdb-ui and gdb-mi. (gdb-find-file-hook, gdb-set-gud-minor-mode-existing-buffers-1) (gdb-var-list-children-1, gdb-info-breakpoints-custom) (gdb-var-update-1, gdb-invalidate-locals-1): Use also for gdb-mi.
author Nick Roberts <nickrob@snap.net.nz>
date Mon, 13 Feb 2006 21:59:45 +0000
parents dc49655f57ae
children 5de231ae5dc9 d57ee9eab157
comparison
equal deleted inserted replaced
68863:4b4a17955b59 68864:47f77ab239fc
569 (dolist (var gdb-var-list) 569 (dolist (var gdb-var-list)
570 (if (string-equal expr (car var)) (throw 'already-watched nil))) 570 (if (string-equal expr (car var)) (throw 'already-watched nil)))
571 (set-text-properties 0 (length expr) nil expr) 571 (set-text-properties 0 (length expr) nil expr)
572 (gdb-enqueue-input 572 (gdb-enqueue-input
573 (list 573 (list
574 (if (eq gud-minor-mode 'gdba) 574 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
575 (concat "server interpreter mi \"-var-create - * " expr "\"\n") 575 (concat "server interpreter mi \"-var-create - * " expr "\"\n")
576 (concat"-var-create - * " expr "\n")) 576 (concat"-var-create - * " expr "\n"))
577 `(lambda () (gdb-var-create-handler ,expr)))))))) 577 `(lambda () (gdb-var-create-handler ,expr))))))))
578 578
579 (defconst gdb-var-create-regexp 579 (defconst gdb-var-create-regexp
592 (unless (string-equal 592 (unless (string-equal
593 speedbar-initial-expansion-list-name "GUD") 593 speedbar-initial-expansion-list-name "GUD")
594 (speedbar-change-initial-expansion-list "GUD")) 594 (speedbar-change-initial-expansion-list "GUD"))
595 (gdb-enqueue-input 595 (gdb-enqueue-input
596 (list 596 (list
597 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 597 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
598 'gdba)
599 (concat "server interpreter mi \"-var-evaluate-expression " 598 (concat "server interpreter mi \"-var-evaluate-expression "
600 (nth 1 var) "\"\n") 599 (nth 1 var) "\"\n")
601 (concat "-var-evaluate-expression " (nth 1 var) "\n")) 600 (concat "-var-evaluate-expression " (nth 1 var) "\n"))
602 `(lambda () (gdb-var-evaluate-expression-handler 601 `(lambda () (gdb-var-evaluate-expression-handler
603 ,(nth 1 var) nil)))) 602 ,(nth 1 var) nil))))
741 "Expand the node the user clicked on. 740 "Expand the node the user clicked on.
742 TEXT is the text of the button we clicked on, a + or - item. 741 TEXT is the text of the button we clicked on, a + or - item.
743 TOKEN is data related to this node. 742 TOKEN is data related to this node.
744 INDENT is the current indentation depth." 743 INDENT is the current indentation depth."
745 (cond ((string-match "+" text) ;expand this node 744 (cond ((string-match "+" text) ;expand this node
746 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 745 (if (and
747 (if (string-equal gdb-version "pre-6.4") 746 (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
748 (gdb-var-list-children token) 747 (string-equal gdb-version "pre-6.4"))
749 (gdb-var-list-children-1 token)) 748 (gdb-var-list-children token)
750 (progn 749 (gdb-var-list-children-1 token)))
751 (gdbmi-var-update)
752 (gdbmi-var-list-children token))))
753 ((string-match "-" text) ;contract this node 750 ((string-match "-" text) ;contract this node
754 (dolist (var gdb-var-list) 751 (dolist (var gdb-var-list)
755 (if (string-match (concat token "\\.") (nth 1 var)) 752 (if (string-match (concat token "\\.") (nth 1 var))
756 (setq gdb-var-list (delq var gdb-var-list)))) 753 (setq gdb-var-list (delq var gdb-var-list))))
757 (setq gdb-var-changed t) 754 (setq gdb-var-changed t)
1193 ;; so gdb-frame-address is updated. 1190 ;; so gdb-frame-address is updated.
1194 ;; (gdb-invalidate-assembler) 1191 ;; (gdb-invalidate-assembler)
1195 1192
1196 (if (string-equal gdb-version "pre-6.4") 1193 (if (string-equal gdb-version "pre-6.4")
1197 (gdb-invalidate-registers) 1194 (gdb-invalidate-registers)
1198 (if (gdb-get-buffer 'gdb-registers-buffer) (gdb-get-changed-registers)) 1195 (gdb-get-changed-registers)
1199 (gdb-invalidate-registers-1)) 1196 (gdb-invalidate-registers-1))
1200 1197
1201 (gdb-invalidate-memory) 1198 (gdb-invalidate-memory)
1202 (if (string-equal gdb-version "pre-6.4") 1199 (if (string-equal gdb-version "pre-6.4")
1203 (gdb-invalidate-locals) 1200 (gdb-invalidate-locals)
1496 (defun gdb-info-breakpoints-custom () 1493 (defun gdb-info-breakpoints-custom ()
1497 (let ((flag) (bptno)) 1494 (let ((flag) (bptno))
1498 ;; Remove all breakpoint-icons in source buffers but not assembler buffer. 1495 ;; Remove all breakpoint-icons in source buffers but not assembler buffer.
1499 (dolist (buffer (buffer-list)) 1496 (dolist (buffer (buffer-list))
1500 (with-current-buffer buffer 1497 (with-current-buffer buffer
1501 (if (and (eq gud-minor-mode 'gdba) 1498 (if (and (memq gud-minor-mode '(gdba gdbmi))
1502 (not (string-match "\\`\\*.+\\*\\'" (buffer-name)))) 1499 (not (string-match "\\`\\*.+\\*\\'" (buffer-name))))
1503 (gdb-remove-breakpoint-icons (point-min) (point-max))))) 1500 (gdb-remove-breakpoint-icons (point-min) (point-max)))))
1504 (with-current-buffer (gdb-get-buffer 'gdb-breakpoints-buffer) 1501 (with-current-buffer (gdb-get-buffer 'gdb-breakpoints-buffer)
1505 (save-excursion 1502 (save-excursion
1506 (goto-char (point-min)) 1503 (goto-char (point-min))
1631 (display-buffer (gdb-get-create-buffer 'gdb-breakpoints-buffer)))) 1628 (display-buffer (gdb-get-create-buffer 'gdb-breakpoints-buffer))))
1632 1629
1633 (defvar gdb-breakpoints-mode-map 1630 (defvar gdb-breakpoints-mode-map
1634 (let ((map (make-sparse-keymap)) 1631 (let ((map (make-sparse-keymap))
1635 (menu (make-sparse-keymap "Breakpoints"))) 1632 (menu (make-sparse-keymap "Breakpoints")))
1636 (define-key menu [quit] '("Quit" . kill-this-buffer)) 1633 (define-key menu [quit] '("Quit" . gdb-delete-frame-or-window))
1637 (define-key menu [goto] '("Goto" . gdb-goto-breakpoint)) 1634 (define-key menu [goto] '("Goto" . gdb-goto-breakpoint))
1638 (define-key menu [delete] '("Delete" . gdb-delete-breakpoint)) 1635 (define-key menu [delete] '("Delete" . gdb-delete-breakpoint))
1639 (define-key menu [toggle] '("Toggle" . gdb-toggle-breakpoint)) 1636 (define-key menu [toggle] '("Toggle" . gdb-toggle-breakpoint))
1640 (suppress-keymap map) 1637 (suppress-keymap map)
1641 (define-key map [menu-bar breakpoints] (cons "Breakpoints" menu)) 1638 (define-key map [menu-bar breakpoints] (cons "Breakpoints" menu))
1666 (run-mode-hooks 'gdb-breakpoints-mode-hook) 1663 (run-mode-hooks 'gdb-breakpoints-mode-hook)
1667 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 1664 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
1668 'gdb-invalidate-breakpoints 1665 'gdb-invalidate-breakpoints
1669 'gdbmi-invalidate-breakpoints)) 1666 'gdbmi-invalidate-breakpoints))
1670 1667
1668 (defconst gdb-breakpoint-regexp
1669 "\\([0-9]+\\).*?\\(?:point\\|catch\\s-+\\S-+\\)\\s-+\\S-+\\s-+\\(.\\)\\s-+")
1670
1671 (defun gdb-toggle-breakpoint () 1671 (defun gdb-toggle-breakpoint ()
1672 "Enable/disable breakpoint at current line." 1672 "Enable/disable breakpoint at current line."
1673 (interactive) 1673 (interactive)
1674 (save-excursion 1674 (save-excursion
1675 (beginning-of-line 1) 1675 (beginning-of-line 1)
1676 (if (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 1676 (if (looking-at gdb-breakpoint-regexp)
1677 (looking-at "\\([0-9]+\\).*?point\\s-+\\S-+\\s-+\\(.\\)\\s-+")
1678 (looking-at
1679 "\\([0-9]+\\)\\s-+\\S-+\\s-+\\S-+\\s-+\\(.\\)\\s-+\\S-+\\s-+\\S-+:[0-9]+"))
1680 (gdb-enqueue-input 1677 (gdb-enqueue-input
1681 (list 1678 (list
1682 (concat gdb-server-prefix 1679 (concat gdb-server-prefix
1683 (if (eq ?y (char-after (match-beginning 2))) 1680 (if (eq ?y (char-after (match-beginning 2)))
1684 "disable " 1681 "disable "
1688 1685
1689 (defun gdb-delete-breakpoint () 1686 (defun gdb-delete-breakpoint ()
1690 "Delete the breakpoint at current line." 1687 "Delete the breakpoint at current line."
1691 (interactive) 1688 (interactive)
1692 (beginning-of-line 1) 1689 (beginning-of-line 1)
1693 (if (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 1690 (if (looking-at gdb-breakpoint-regexp)
1694 (looking-at "\\([0-9]+\\).*?point\\s-+\\S-+\\s-+\\(.\\)")
1695 (looking-at
1696 "\\([0-9]+\\)\\s-+\\S-+\\s-+\\S-+\\s-+\\s-+\\S-+\\s-+\\S-+:[0-9]+"))
1697 (gdb-enqueue-input 1691 (gdb-enqueue-input
1698 (list 1692 (list
1699 (concat gdb-server-prefix "delete " (match-string 1) "\n") 'ignore)) 1693 (concat gdb-server-prefix "delete " (match-string 1) "\n") 'ignore))
1700 (error "Not recognized as break/watchpoint line"))) 1694 (error "Not recognized as break/watchpoint line")))
1701 1695
1706 ;; Hack to stop gdb-goto-breakpoint displaying in GUD buffer. 1700 ;; Hack to stop gdb-goto-breakpoint displaying in GUD buffer.
1707 (let ((window (get-buffer-window gud-comint-buffer))) 1701 (let ((window (get-buffer-window gud-comint-buffer)))
1708 (if window (save-selected-window (select-window window)))) 1702 (if window (save-selected-window (select-window window))))
1709 (save-excursion 1703 (save-excursion
1710 (beginning-of-line 1) 1704 (beginning-of-line 1)
1711 (if (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 1705 (if (looking-at "\\([0-9]+\\) .+ in .+ at\\s-+\\(\\S-+\\):\\([0-9]+\\)")
1712 (looking-at "\\([0-9]+\\) .+ in .+ at\\s-+\\(\\S-+\\):\\([0-9]+\\)")
1713 (looking-at
1714 "\\([0-9]+\\)\\s-+\\S-+\\s-+\\S-+\\s-+.\\s-+\\S-+\\s-+\
1715 \\(\\S-+\\):\\([0-9]+\\)"))
1716 (let ((bptno (match-string 1)) 1706 (let ((bptno (match-string 1))
1717 (file (match-string 2)) 1707 (file (match-string 2))
1718 (line (match-string 3))) 1708 (line (match-string 3)))
1719 (save-selected-window 1709 (save-selected-window
1720 (let* ((buf (find-file-noselect 1710 (let* ((buf (find-file-noselect
1722 (cdr (assoc bptno gdb-location-alist))))) 1712 (cdr (assoc bptno gdb-location-alist)))))
1723 (window (display-buffer buf))) 1713 (window (display-buffer buf)))
1724 (with-current-buffer buf 1714 (with-current-buffer buf
1725 (goto-line (string-to-number line)) 1715 (goto-line (string-to-number line))
1726 (set-window-point window (point)))))) 1716 (set-window-point window (point))))))
1727 (error "Not recognized as break/watchpoint line")))) 1717 (error "No location specified."))))
1728 1718
1729 1719
1730 ;; Frames buffer. This displays a perpetually correct bactracktrace 1720 ;; Frames buffer. This displays a perpetually correct bactracktrace
1731 ;; (from the command `where'). 1721 ;; (from the command `where').
1732 ;; 1722 ;;
2414 (setq buffer-read-only t) 2404 (setq buffer-read-only t)
2415 (use-local-map gdb-locals-mode-map) 2405 (use-local-map gdb-locals-mode-map)
2416 (set (make-local-variable 'font-lock-defaults) 2406 (set (make-local-variable 'font-lock-defaults)
2417 '(gdb-locals-font-lock-keywords)) 2407 '(gdb-locals-font-lock-keywords))
2418 (run-mode-hooks 'gdb-locals-mode-hook) 2408 (run-mode-hooks 'gdb-locals-mode-hook)
2419 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 2409 (if (and (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
2420 (if (string-equal gdb-version "pre-6.4") 2410 (string-equal gdb-version "pre-6.4"))
2421 'gdb-invalidate-locals 2411 'gdb-invalidate-locals
2422 'gdb-invalidate-locals-1) 2412 'gdb-invalidate-locals-1))
2423 'gdbmi-invalidate-locals))
2424 2413
2425 (defun gdb-locals-buffer-name () 2414 (defun gdb-locals-buffer-name ()
2426 (with-current-buffer gud-comint-buffer 2415 (with-current-buffer gud-comint-buffer
2427 (concat "*locals of " (gdb-get-target-string) "*"))) 2416 (concat "*locals of " (gdb-get-target-string) "*")))
2428 2417
2682 "Set up buffer for debugging if file is part of the source code 2671 "Set up buffer for debugging if file is part of the source code
2683 of the current session." 2672 of the current session."
2684 (if (and (buffer-name gud-comint-buffer) 2673 (if (and (buffer-name gud-comint-buffer)
2685 ;; in case gud or gdb-ui is just loaded 2674 ;; in case gud or gdb-ui is just loaded
2686 gud-comint-buffer 2675 gud-comint-buffer
2687 (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 2676 (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
2688 'gdba)) 2677 '(gdba gdbmi)))
2689 (if (member buffer-file-name gdb-source-file-list) 2678 (if (member buffer-file-name gdb-source-file-list)
2690 (with-current-buffer (find-buffer-visiting buffer-file-name) 2679 (with-current-buffer (find-buffer-visiting buffer-file-name)
2691 (set (make-local-variable 'gud-minor-mode) 'gdba) 2680 (set (make-local-variable 'gud-minor-mode)
2681 (buffer-local-value 'gud-minor-mode gud-comint-buffer))
2692 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map))))) 2682 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)))))
2693 2683
2694 ;;from put-image 2684 ;;from put-image
2695 (defun gdb-put-string (putstring pos &optional dprop &rest sprops) 2685 (defun gdb-put-string (putstring pos &optional dprop &rest sprops)
2696 "Put string PUTSTRING in front of POS in the current buffer. 2686 "Put string PUTSTRING in front of POS in the current buffer.
2971 2961
2972 ;; For debugging Emacs only (assumes that usual stack buffer already exists). 2962 ;; For debugging Emacs only (assumes that usual stack buffer already exists).
2973 (defun gdb-xbacktrace () 2963 (defun gdb-xbacktrace ()
2974 "Generate a full lisp level backtrace with arguments." 2964 "Generate a full lisp level backtrace with arguments."
2975 (interactive) 2965 (interactive)
2976 (setq my-frames nil) 2966 (let ((frames nil)
2977 (with-current-buffer (get-buffer-create "xbacktrace") 2967 (frame-number gdb-frame-number))
2978 (erase-buffer))
2979 (let (frame-number gdb-frame-number)
2980 (with-current-buffer (gdb-get-buffer 'gdb-stack-buffer) 2968 (with-current-buffer (gdb-get-buffer 'gdb-stack-buffer)
2981 (save-excursion 2969 (save-excursion
2982 (goto-char (point-min)) 2970 (goto-char (point-min))
2983 (while (search-forward "in Ffuncall " nil t) 2971 (while (search-forward "in Ffuncall " nil t)
2984 (goto-char (line-beginning-position)) 2972 (goto-char (line-beginning-position))
2985 (looking-at "^#\\([0-9]+\\)") 2973 (looking-at "^#\\([0-9]+\\)")
2986 (push (match-string-no-properties 1) my-frames) 2974 (push (match-string-no-properties 1) frames)
2987 (forward-line 1)))) 2975 (forward-line 1))))
2988 (dolist (frame my-frames) 2976 (dolist (frame frames)
2989 (gdb-enqueue-input (list (concat "server frame " frame "\n") 2977 (gdb-enqueue-input (list (concat "server frame " frame "\n")
2990 'ignore)) 2978 'ignore))
2979 ; can't use separate buffer because Emacs gets confused by starting
2980 ; annotation from debug1_print (with output-sink eq 'emacs)
2991 ; (gdb-enqueue-input (list "server ppargs\n" 'gdb-get-arguments)) 2981 ; (gdb-enqueue-input (list "server ppargs\n" 'gdb-get-arguments))
2992 (gud-basic-call "server ppargs") 2982 (gud-basic-call "server ppargs"))
2993 )
2994 (gdb-enqueue-input (list (concat "server frame " frame-number "\n") 2983 (gdb-enqueue-input (list (concat "server frame " frame-number "\n")
2995 'ignore)))) 2984 'ignore))))
2996
2997 (defun gdb-get-arguments ()
2998 (with-current-buffer "xbacktrace"
2999 (insert-buffer-substring (gdb-get-buffer 'gdb-partial-output-buffer))))
3000 2985
3001 ;; Code specific to GDB 6.4 2986 ;; Code specific to GDB 6.4
3002 (defconst gdb-source-file-regexp-1 "fullname=\"\\(.*?\\)\"") 2987 (defconst gdb-source-file-regexp-1 "fullname=\"\\(.*?\\)\"")
3003 2988
3004 (defun gdb-set-gud-minor-mode-existing-buffers-1 () 2989 (defun gdb-set-gud-minor-mode-existing-buffers-1 ()
3007 (while (re-search-forward gdb-source-file-regexp-1 nil t) 2992 (while (re-search-forward gdb-source-file-regexp-1 nil t)
3008 (push (match-string 1) gdb-source-file-list)) 2993 (push (match-string 1) gdb-source-file-list))
3009 (dolist (buffer (buffer-list)) 2994 (dolist (buffer (buffer-list))
3010 (with-current-buffer buffer 2995 (with-current-buffer buffer
3011 (when (member buffer-file-name gdb-source-file-list) 2996 (when (member buffer-file-name gdb-source-file-list)
3012 (set (make-local-variable 'gud-minor-mode) 'gdba) 2997 (set (make-local-variable 'gud-minor-mode)
2998 (buffer-local-value 'gud-minor-mode gud-comint-buffer))
3013 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map) 2999 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
3014 (when gud-tooltip-mode 3000 (when gud-tooltip-mode
3015 (make-local-variable 'gdb-define-alist) 3001 (make-local-variable 'gdb-define-alist)
3016 (gdb-create-define-alist) 3002 (gdb-create-define-alist)
3017 (add-hook 'after-save-hook 'gdb-create-define-alist nil t)))))) 3003 (add-hook 'after-save-hook 'gdb-create-define-alist nil t))))))
3018 3004
3019 ; Uses "-var-list-children --all-values". Needs GDB 6.1 onwards. 3005 ; Uses "-var-list-children --all-values". Needs GDB 6.1 onwards.
3020 (defun gdb-var-list-children-1 (varnum) 3006 (defun gdb-var-list-children-1 (varnum)
3021 (gdb-enqueue-input 3007 (gdb-enqueue-input
3022 (list (concat "server interpreter mi \"-var-update " varnum "\"\n") 3008 (list
3023 'ignore)) 3009 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
3024 (gdb-enqueue-input 3010 (concat "server interpreter mi \"-var-list-children --all-values "
3025 (list (concat "server interpreter mi \"-var-list-children --all-values " 3011 varnum "\"\n")
3026 varnum "\"\n") 3012 (concat "-var-list-children --all-values " varnum "\n"))
3027 `(lambda () (gdb-var-list-children-handler-1 ,varnum))))) 3013 `(lambda () (gdb-var-list-children-handler-1 ,varnum)))))
3028 3014
3029 (defconst gdb-var-list-children-regexp-1 3015 (defconst gdb-var-list-children-regexp-1
3030 "name=\"\\(.+?\\)\",exp=\"\\(.+?\\)\",numchild=\"\\(.+?\\)\",\ 3016 "name=\"\\(.+?\\)\",exp=\"\\(.+?\\)\",numchild=\"\\(.+?\\)\",\
3031 value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}") 3017 value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
3032 3018
3057 (defun gdb-var-update-1 () 3043 (defun gdb-var-update-1 ()
3058 (if (not (member 'gdb-var-update gdb-pending-triggers)) 3044 (if (not (member 'gdb-var-update gdb-pending-triggers))
3059 (progn 3045 (progn
3060 (gdb-enqueue-input 3046 (gdb-enqueue-input
3061 (list 3047 (list
3062 (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) 3048 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
3063 "server interpreter mi \"-var-update --all-values *\"\n" 3049 "server interpreter mi \"-var-update --all-values *\"\n"
3064 "-var-update --all-values *\n") 3050 "-var-update --all-values *\n")
3065 'gdb-var-update-handler-1)) 3051 'gdb-var-update-handler-1))
3066 (push 'gdb-var-update gdb-pending-triggers)))) 3052 (push 'gdb-var-update gdb-pending-triggers))))
3067 3053
3068 (defconst gdb-var-update-regexp-1 "name=\"\\(.*?\\)\",value=\\(\".*?\"\\),") 3054 (defconst gdb-var-update-regexp-1 "name=\"\\(.*?\\)\",value=\\(\".*?\"\\),")
3069 3055
3070 (defun gdb-var-update-handler-1 () 3056 (defun gdb-var-update-handler-1 ()
3096 'gdb-registers-buffer-name 3082 'gdb-registers-buffer-name
3097 'gdb-registers-mode) 3083 'gdb-registers-mode)
3098 3084
3099 (def-gdb-auto-update-trigger gdb-invalidate-registers-1 3085 (def-gdb-auto-update-trigger gdb-invalidate-registers-1
3100 (gdb-get-buffer 'gdb-registers-buffer) 3086 (gdb-get-buffer 'gdb-registers-buffer)
3101 (if (eq gud-minor-mode 'gdba) 3087 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
3102 "server interpreter mi \"-data-list-register-values x\"\n" 3088 "server interpreter mi \"-data-list-register-values x\"\n"
3103 "-data-list-register-values x\n") 3089 "-data-list-register-values x\n")
3104 gdb-data-list-register-values-handler) 3090 gdb-data-list-register-values-handler)
3105 3091
3106 (defconst gdb-data-list-register-values-regexp 3092 (defconst gdb-data-list-register-values-regexp
3155 mouse-face highlight)))) 3141 mouse-face highlight))))
3156 (forward-line 1)))))) 3142 (forward-line 1))))))
3157 3143
3158 ;; Needs GDB 6.4 onwards (used to fail with no stack). 3144 ;; Needs GDB 6.4 onwards (used to fail with no stack).
3159 (defun gdb-get-changed-registers () 3145 (defun gdb-get-changed-registers ()
3160 (if (not (member 'gdb-get-changed-registers gdb-pending-triggers)) 3146 (if (and (gdb-get-buffer 'gdb-registers-buffer)
3147 (not (member 'gdb-get-changed-registers gdb-pending-triggers)))
3161 (progn 3148 (progn
3162 (gdb-enqueue-input 3149 (gdb-enqueue-input
3163 (list 3150 (list
3164 (if (eq gud-minor-mode 'gdba) 3151 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
3165 "server interpreter mi -data-list-changed-registers\n" 3152 "server interpreter mi -data-list-changed-registers\n"
3166 "-data-list-changed-registers\n") 3153 "-data-list-changed-registers\n")
3167 'gdb-get-changed-registers-handler)) 3154 'gdb-get-changed-registers-handler))
3168 (push 'gdb-get-changed-registers gdb-pending-triggers)))) 3155 (push 'gdb-get-changed-registers gdb-pending-triggers))))
3169 3156
3170 (defconst gdb-data-list-register-names-regexp "\"\\(.*?\\)\"") 3157 (defconst gdb-data-list-register-names-regexp "\"\\(.*?\\)\"")
3171 3158
3172 (defun gdb-get-changed-registers-handler () 3159 (defun gdb-get-changed-registers-handler ()
3185 'gdb-locals-buffer-name 3172 'gdb-locals-buffer-name
3186 'gdb-locals-mode) 3173 'gdb-locals-mode)
3187 3174
3188 (def-gdb-auto-update-trigger gdb-invalidate-locals-1 3175 (def-gdb-auto-update-trigger gdb-invalidate-locals-1
3189 (gdb-get-buffer 'gdb-locals-buffer) 3176 (gdb-get-buffer 'gdb-locals-buffer)
3190 "server interpreter mi -\"stack-list-locals --simple-values\"\n" 3177 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
3178 "server interpreter mi -\"stack-list-locals --simple-values\"\n"
3179 "-stack-list-locals --simple-values\n")
3191 gdb-stack-list-locals-handler) 3180 gdb-stack-list-locals-handler)
3192 3181
3193 (defconst gdb-stack-list-locals-regexp 3182 (defconst gdb-stack-list-locals-regexp
3194 "name=\"\\(.*?\\)\",type=\"\\(.*?\\)\"") 3183 "name=\"\\(.*?\\)\",type=\"\\(.*?\\)\"")
3195 3184