Mercurial > emacs
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 |