Mercurial > emacs
comparison lisp/gdb-ui.el @ 48963:1bb53161a4b9
(gdb-info-display-custom): Ensure that frames/buffers
of displayed expressions are deleted when the displayed expressions
are deleted.
(gdb-delete-disp-this-line, gdb-delete-display): Frame/buffer
deletion is handled by gdb-info-display-custom now.
(gdb-source-info): Undo earlier change (do create display buffer
automatically).
author | Nick Roberts <nickrob@snap.net.nz> |
---|---|
date | Thu, 26 Dec 2002 00:12:09 +0000 |
parents | 1abfa35a3a5a |
children | f3c5848184cb |
comparison
equal
deleted
inserted
replaced
48962:a494d9f972c7 | 48963:1bb53161a4b9 |
---|---|
24 ;; Boston, MA 02111-1307, USA. | 24 ;; Boston, MA 02111-1307, USA. |
25 | 25 |
26 ;;; Commentary: | 26 ;;; Commentary: |
27 | 27 |
28 ;; This file is based on gdba.el from GDB 5.0 written by Jim Kingdon and uses | 28 ;; This file is based on gdba.el from GDB 5.0 written by Jim Kingdon and uses |
29 ;; GDB's annotation interface. You don't need to know about annotations but | 29 ;; GDB's annotation interface. It has been extended to use features of Emacs |
30 ;; If you are interested developing this mode see the Annotations section in | 30 ;; 21 such as the display margin for breakpoints and the toolbar. It also has |
31 ;; the GDB info manual). | 31 ;; new buffers and lots of other new features such as formatted auto-display |
32 ;; | 32 ;; of arrays and structures (see the GDB-UI section in the Emacs info |
33 ;; It has been extended to use features of Emacs 21 such as the display | 33 ;; manual). |
34 ;; margin for breakpoints and the toolbar. It also has new buffers and lots | 34 |
35 ;; of other new features such as formatted auto-display of arrays and | 35 ;; You don't need to know about annotations to use this mode as a graphical |
36 ;; structures (see the GDB-UI section in the Emacs info manual). | 36 ;; user interface to GDB. However, if you are interested developing the mode |
37 ;; itself see the Annotations section in the GDB info manual. | |
37 ;; | 38 ;; |
38 ;; Known Bugs: Does not auto-display arrays of structures or structures | 39 ;; Known Bugs: Does not auto-display arrays of structures or structures |
39 ;; containing arrays properly. | 40 ;; containing arrays. |
40 | 41 |
41 ;;; Code: | 42 ;;; Code: |
42 | 43 |
43 (require 'gud) | 44 (require 'gud) |
44 | 45 |
96 | 97 |
97 `gdb-many-windows' - Toggle the number of windows gdb uses. | 98 `gdb-many-windows' - Toggle the number of windows gdb uses. |
98 `gdb-restore-windows' - To restore the window layout. | 99 `gdb-restore-windows' - To restore the window layout. |
99 `gdb-quit' - To delete (most) of the buffers used by GDB-UI and | 100 `gdb-quit' - To delete (most) of the buffers used by GDB-UI and |
100 reset variables." | 101 reset variables." |
101 | 102 ;; |
102 (interactive (list (gud-query-cmdline 'gdba))) | 103 (interactive (list (gud-query-cmdline 'gdba))) |
103 | 104 ;; |
104 ;; Let's start with a basic gud-gdb buffer and then modify it a bit. | 105 ;; Let's start with a basic gud-gdb buffer and then modify it a bit. |
105 (gdb command-line) | 106 (gdb command-line) |
106 | 107 ;; |
107 (set (make-local-variable 'gud-minor-mode) 'gdba) | 108 (set (make-local-variable 'gud-minor-mode) 'gdba) |
108 (set (make-local-variable 'gud-marker-filter) 'gud-gdba-marker-filter) | 109 (set (make-local-variable 'gud-marker-filter) 'gud-gdba-marker-filter) |
109 | 110 ;; |
110 (gud-def gud-break (if (not (string-equal mode-name "Assembler")) | 111 (gud-def gud-break (if (not (string-equal mode-name "Assembler")) |
111 (gud-call "break %f:%l" arg) | 112 (gud-call "break %f:%l" arg) |
112 (save-excursion | 113 (save-excursion |
113 (beginning-of-line) | 114 (beginning-of-line) |
114 (forward-char 2) | 115 (forward-char 2) |
115 (gud-call "break *%a" arg))) | 116 (gud-call "break *%a" arg))) |
116 "\C-b" "Set breakpoint at current line or address.") | 117 "\C-b" "Set breakpoint at current line or address.") |
117 | 118 ;; |
118 (gud-def gud-remove (if (not (string-equal mode-name "Assembler")) | 119 (gud-def gud-remove (if (not (string-equal mode-name "Assembler")) |
119 (gud-call "clear %f:%l" arg) | 120 (gud-call "clear %f:%l" arg) |
120 (save-excursion | 121 (save-excursion |
121 (beginning-of-line) | 122 (beginning-of-line) |
122 (forward-char 2) | 123 (forward-char 2) |
123 (gud-call "clear *%a" arg))) | 124 (gud-call "clear *%a" arg))) |
124 "\C-d" "Remove breakpoint at current line or address.") | 125 "\C-d" "Remove breakpoint at current line or address.") |
125 | 126 ;; |
126 (setq comint-input-sender 'gdb-send) | 127 (setq comint-input-sender 'gdb-send) |
127 | 128 ;; |
128 ;; (re-)initialise | 129 ;; (re-)initialise |
129 (setq gdb-main-or-pc "main") | 130 (setq gdb-main-or-pc "main") |
130 (setq gdb-current-address nil) | 131 (setq gdb-current-address nil) |
131 (setq gdb-display-in-progress nil) | 132 (setq gdb-display-in-progress nil) |
132 (setq gdb-dive nil) | 133 (setq gdb-dive nil) |
133 | 134 ;; |
134 (mapc 'make-local-variable gdb-variables) | 135 (mapc 'make-local-variable gdb-variables) |
135 (setq gdb-buffer-type 'gdba) | 136 (setq gdb-buffer-type 'gdba) |
136 | 137 ;; |
137 (gdb-clear-inferior-io) | 138 (gdb-clear-inferior-io) |
138 | 139 ;; |
139 ;; find source file and compilation directory here | 140 ;; find source file and compilation directory here |
140 (gdb-enqueue-input (list "server list\n" 'ignore)) | 141 (gdb-enqueue-input (list "server list\n" 'ignore)) |
141 (gdb-enqueue-input (list "server info source\n" | 142 (gdb-enqueue-input (list "server info source\n" |
142 'gdb-source-info)) | 143 'gdb-source-info)) |
143 | 144 ;; |
144 (run-hooks 'gdba-mode-hook)) | 145 (run-hooks 'gdba-mode-hook)) |
145 | 146 |
146 (defun gud-display () | 147 (defun gud-display () |
147 "Display (possibly dereferenced) C expression at point." | 148 "Display (possibly dereferenced) C expression at point." |
148 (interactive) | 149 (interactive) |
723 (setq gdb-expression (concat char gdb-current-frame | 724 (setq gdb-expression (concat char gdb-current-frame |
724 "::" gdb-expression)) | 725 "::" gdb-expression)) |
725 ;;else put * back on if necessary | 726 ;;else put * back on if necessary |
726 (setq gdb-expression (concat char gdb-expression))) | 727 (setq gdb-expression (concat char gdb-expression))) |
727 (setq header-line-format (concat "-- " gdb-expression " %-")))) | 728 (setq header-line-format (concat "-- " gdb-expression " %-")))) |
728 | 729 ;; |
729 ;;-if scalar/string | 730 ;;-if scalar/string |
730 (if (not (re-search-forward "##" nil t)) | 731 (if (not (re-search-forward "##" nil t)) |
731 (progn | 732 (progn |
732 (save-excursion | 733 (save-excursion |
733 (set-buffer gdb-expression-buffer-name) | 734 (set-buffer gdb-expression-buffer-name) |
1046 (let ( | 1047 (let ( |
1047 ;; Recall the left over burst from last time | 1048 ;; Recall the left over burst from last time |
1048 (burst (concat (gdb-get-burst) string)) | 1049 (burst (concat (gdb-get-burst) string)) |
1049 ;; Start accumulating output for the GUD buffer | 1050 ;; Start accumulating output for the GUD buffer |
1050 (output "")) | 1051 (output "")) |
1051 | 1052 ;; |
1052 ;; Process all the complete markers in this chunk. | 1053 ;; Process all the complete markers in this chunk. |
1053 (while (string-match "\n\032\032\\(.*\\)\n" burst) | 1054 (while (string-match "\n\032\032\\(.*\\)\n" burst) |
1054 (let ((annotation (match-string 1 burst))) | 1055 (let ((annotation (match-string 1 burst))) |
1055 | 1056 ;; |
1056 ;; Stuff prior to the match is just ordinary output. | 1057 ;; Stuff prior to the match is just ordinary output. |
1057 ;; It is either concatenated to OUTPUT or directed | 1058 ;; It is either concatenated to OUTPUT or directed |
1058 ;; elsewhere. | 1059 ;; elsewhere. |
1059 (setq output | 1060 (setq output |
1060 (gdb-concat-output | 1061 (gdb-concat-output |
1076 annotation-arguments) | 1077 annotation-arguments) |
1077 ;; Else the annotation is not recognized. Ignore it silently, | 1078 ;; Else the annotation is not recognized. Ignore it silently, |
1078 ;; so that GDB can add new annotations without causing | 1079 ;; so that GDB can add new annotations without causing |
1079 ;; us to blow up. | 1080 ;; us to blow up. |
1080 )))) | 1081 )))) |
1081 | 1082 ;; |
1082 ;; Does the remaining text end in a partial line? | 1083 ;; Does the remaining text end in a partial line? |
1083 ;; If it does, then keep part of the burst until we get more. | 1084 ;; If it does, then keep part of the burst until we get more. |
1084 (if (string-match "\n\\'\\|\n\032\\'\\|\n\032\032.*\\'" | 1085 (if (string-match "\n\\'\\|\n\032\\'\\|\n\032\032.*\\'" |
1085 burst) | 1086 burst) |
1086 (progn | 1087 (progn |
1087 ;; Everything before the potential marker start can be output. | 1088 ;; Everything before the potential marker start can be output. |
1088 (setq output | 1089 (setq output |
1089 (gdb-concat-output output | 1090 (gdb-concat-output output |
1090 (substring burst 0 (match-beginning 0)))) | 1091 (substring burst 0 (match-beginning 0)))) |
1091 | 1092 ;; |
1092 ;; Everything after, we save, to combine with later input. | 1093 ;; Everything after, we save, to combine with later input. |
1093 (setq burst (substring burst (match-beginning 0)))) | 1094 (setq burst (substring burst (match-beginning 0)))) |
1094 | 1095 ;; |
1095 ;; In case we know the burst contains no partial annotations: | 1096 ;; In case we know the burst contains no partial annotations: |
1096 (progn | 1097 (progn |
1097 (setq output (gdb-concat-output output burst)) | 1098 (setq output (gdb-concat-output output burst)) |
1098 (setq burst ""))) | 1099 (setq burst ""))) |
1099 | 1100 ;; |
1100 ;; Save the remaining burst for the next call to this function. | 1101 ;; Save the remaining burst for the next call to this function. |
1101 (gdb-set-burst burst) | 1102 (gdb-set-burst burst) |
1102 output))) | 1103 output))) |
1103 | 1104 |
1104 (defun gdb-concat-output (so-far new) | 1105 (defun gdb-concat-output (so-far new) |
1223 ;; `gdb-breakpoints-buffer'. | 1224 ;; `gdb-breakpoints-buffer'. |
1224 ;; | 1225 ;; |
1225 ;; It defines a function to serve as the annotation handler that | 1226 ;; It defines a function to serve as the annotation handler that |
1226 ;; handles the `foo-invalidated' message. That function is called: | 1227 ;; handles the `foo-invalidated' message. That function is called: |
1227 gdb-invalidate-breakpoints | 1228 gdb-invalidate-breakpoints |
1228 | 1229 ;; |
1229 ;; To update the buffer, this command is sent to gdb. | 1230 ;; To update the buffer, this command is sent to gdb. |
1230 "server info breakpoints\n" | 1231 "server info breakpoints\n" |
1231 | 1232 ;; |
1232 ;; This also defines a function to be the handler for the output | 1233 ;; This also defines a function to be the handler for the output |
1233 ;; from the command above. That function will copy the output into | 1234 ;; from the command above. That function will copy the output into |
1234 ;; the appropriately typed buffer. That function will be called: | 1235 ;; the appropriately typed buffer. That function will be called: |
1235 gdb-info-breakpoints-handler | 1236 gdb-info-breakpoints-handler |
1236 ;; buffer specific functions | 1237 ;; buffer specific functions |
1241 (defvar breakpoint-disabled-icon) | 1242 (defvar breakpoint-disabled-icon) |
1242 | 1243 |
1243 ;;-put breakpoint icons in relevant margins (even those set in the GUD buffer) | 1244 ;;-put breakpoint icons in relevant margins (even those set in the GUD buffer) |
1244 (defun gdb-info-breakpoints-custom () | 1245 (defun gdb-info-breakpoints-custom () |
1245 (let ((flag)(address)) | 1246 (let ((flag)(address)) |
1246 | 1247 ;; |
1247 ;; remove all breakpoint-icons in source buffers but not assembler buffer | 1248 ;; remove all breakpoint-icons in source buffers but not assembler buffer |
1248 (dolist (buffer (buffer-list)) | 1249 (dolist (buffer (buffer-list)) |
1249 (save-excursion | 1250 (save-excursion |
1250 (set-buffer buffer) | 1251 (set-buffer buffer) |
1251 (if (and (eq gud-minor-mode 'gdba) | 1252 (if (and (eq gud-minor-mode 'gdba) |
1356 (error "Not recognized as break/watchpoint line") | 1357 (error "Not recognized as break/watchpoint line") |
1357 (gdb-enqueue-input | 1358 (gdb-enqueue-input |
1358 (list | 1359 (list |
1359 (concat | 1360 (concat |
1360 (if (eq ?y (char-after (match-beginning 2))) | 1361 (if (eq ?y (char-after (match-beginning 2))) |
1361 "server disable " | 1362 "server disable " |
1362 "server enable ") | 1363 "server enable ") |
1363 (match-string 1) | 1364 (match-string 1) "\n") |
1364 "\n") | |
1365 'ignore))))) | 1365 'ignore))))) |
1366 | 1366 |
1367 (defun gdb-delete-bp-this-line () | 1367 (defun gdb-delete-bp-this-line () |
1368 "Delete the breakpoint of the current line." | 1368 "Delete the breakpoint of the current line." |
1369 (interactive) | 1369 (interactive) |
1420 'mouse-face 'highlight) | 1420 'mouse-face 'highlight) |
1421 (forward-line 1))))) | 1421 (forward-line 1))))) |
1422 | 1422 |
1423 (defun gdb-stack-buffer-name () | 1423 (defun gdb-stack-buffer-name () |
1424 (with-current-buffer gud-comint-buffer | 1424 (with-current-buffer gud-comint-buffer |
1425 (concat "*stack frames of " | 1425 (concat "*stack frames of " (gdb-get-target-string) "*"))) |
1426 (gdb-get-target-string) "*"))) | |
1427 | 1426 |
1428 (defun gdb-display-stack-buffer () | 1427 (defun gdb-display-stack-buffer () |
1429 (interactive) | 1428 (interactive) |
1430 (gdb-display-buffer | 1429 (gdb-display-buffer |
1431 (gdb-get-create-buffer 'gdb-stack-buffer))) | 1430 (gdb-get-create-buffer 'gdb-stack-buffer))) |
1469 (setq selection (gdb-get-frame-number)))) | 1468 (setq selection (gdb-get-frame-number)))) |
1470 (select-window (posn-window (event-end e))) | 1469 (select-window (posn-window (event-end e))) |
1471 (save-excursion | 1470 (save-excursion |
1472 (set-buffer gud-comint-buffer) | 1471 (set-buffer gud-comint-buffer) |
1473 (gdb-enqueue-input | 1472 (gdb-enqueue-input |
1474 (list (gud-format-command "server frame %p\n" selection) | 1473 (list (gud-format-command "server frame %p\n" selection) 'ignore)) |
1475 'ignore)) | |
1476 (gud-display-frame)))) | 1474 (gud-display-frame)))) |
1477 | 1475 |
1478 | 1476 |
1479 ;; | 1477 ;; |
1480 ;; Registers buffer. | 1478 ;; Registers buffer. |
1531 gdb-invalidate-locals | 1529 gdb-invalidate-locals |
1532 "server info locals\n" | 1530 "server info locals\n" |
1533 gdb-info-locals-handler | 1531 gdb-info-locals-handler |
1534 gdb-info-locals-custom) | 1532 gdb-info-locals-custom) |
1535 | 1533 |
1536 | 1534 ;; Abbreviate for arrays and structures. |
1537 ;;Abbreviate for arrays and structures. These can be expanded using gud-display | 1535 ;; These can be expanded using gud-display. |
1538 (defun gdb-info-locals-handler nil | 1536 (defun gdb-info-locals-handler nil |
1539 (gdb-set-pending-triggers (delq 'gdb-invalidate-locals | 1537 (gdb-set-pending-triggers (delq 'gdb-invalidate-locals |
1540 (gdb-get-pending-triggers))) | 1538 (gdb-get-pending-triggers))) |
1541 (let ((buf (gdb-get-buffer 'gdb-partial-output-buffer))) | 1539 (let ((buf (gdb-get-buffer 'gdb-partial-output-buffer))) |
1542 (save-excursion | 1540 (save-excursion |
1606 "server info display\n" | 1604 "server info display\n" |
1607 gdb-info-display-handler | 1605 gdb-info-display-handler |
1608 gdb-info-display-custom) | 1606 gdb-info-display-custom) |
1609 | 1607 |
1610 (defun gdb-info-display-custom () | 1608 (defun gdb-info-display-custom () |
1611 ;; TODO: ensure frames of expressions that have been deleted are also deleted | 1609 (let ((display-list nil)) |
1612 ;; these can be missed currently eg through GUD buffer, restarting a | 1610 (save-excursion |
1613 ;; recompiled program. | 1611 (set-buffer (gdb-get-buffer 'gdb-display-buffer)) |
1614 ) | 1612 (goto-char (point-min)) |
1613 (while (< (point) (- (point-max) 1)) | |
1614 (forward-line 1) | |
1615 (if (looking-at "\\([0-9]+\\): \\([ny]\\)") | |
1616 (setq display-list | |
1617 (cons (string-to-int (match-string 1)) display-list))) | |
1618 (end-of-line))) | |
1619 (if (not (display-graphic-p)) | |
1620 (progn | |
1621 (dolist (buffer (buffer-list)) | |
1622 (if (string-match "\\*display \\([0-9]+\\)\\*" (buffer-name buffer)) | |
1623 (progn | |
1624 (let ((number | |
1625 (match-string 1 (buffer-name buffer)))) | |
1626 (if (not (memq (string-to-int number) display-list)) | |
1627 (kill-buffer | |
1628 (get-buffer (concat "*display " number "*"))))))))) | |
1629 (dolist (frame (frame-list)) | |
1630 (let ((frame-name (frame-parameter frame 'name))) | |
1631 (if (string-match "\\*display \\([0-9]+\\)\\*" frame-name) | |
1632 (progn | |
1633 (let ((number (match-string 1 frame-name))) | |
1634 (if (not (memq (string-to-int number) display-list)) | |
1635 (progn (kill-buffer | |
1636 (get-buffer (concat "*display " number "*"))) | |
1637 (delete-frame frame))))))))))) | |
1615 | 1638 |
1616 (defvar gdb-display-mode-map | 1639 (defvar gdb-display-mode-map |
1617 (let ((map (make-sparse-keymap)) | 1640 (let ((map (make-sparse-keymap)) |
1618 (menu (make-sparse-keymap "Display"))) | 1641 (menu (make-sparse-keymap "Display"))) |
1619 (define-key menu [toggle] '("Toggle" . gdb-toggle-disp-this-line)) | 1642 (define-key menu [toggle] '("Toggle" . gdb-toggle-disp-this-line)) |
1660 (list | 1683 (list |
1661 (concat | 1684 (concat |
1662 (if (eq ?y (char-after (match-beginning 2))) | 1685 (if (eq ?y (char-after (match-beginning 2))) |
1663 "server disable display " | 1686 "server disable display " |
1664 "server enable display ") | 1687 "server enable display ") |
1665 (match-string 1) | 1688 (match-string 1) "\n") |
1666 "\n") | |
1667 'ignore))))) | 1689 'ignore))))) |
1668 | 1690 |
1669 (defun gdb-delete-disp-this-line () | 1691 (defun gdb-delete-disp-this-line () |
1670 "Delete the displayed expression of the current line." | 1692 "Delete the displayed expression of the current line." |
1671 (interactive) | 1693 (interactive) |
1675 (beginning-of-line 1) | 1697 (beginning-of-line 1) |
1676 (if (not (looking-at "\\([0-9]+\\): \\([ny]\\)")) | 1698 (if (not (looking-at "\\([0-9]+\\): \\([ny]\\)")) |
1677 (error "No expression on this line") | 1699 (error "No expression on this line") |
1678 (let ((number (match-string 1))) | 1700 (let ((number (match-string 1))) |
1679 (gdb-enqueue-input | 1701 (gdb-enqueue-input |
1680 (list (concat "server delete display " number "\n") | 1702 (list (concat "server delete display " number "\n") 'ignore)))))) |
1681 'ignore)) | |
1682 (if (not (display-graphic-p)) | |
1683 (kill-buffer (get-buffer (concat "*display " number "*"))) | |
1684 (catch 'frame-found | |
1685 (let ((frames (frame-list))) | |
1686 (while frames | |
1687 (if (string-equal (frame-parameter (car frames) 'name) | |
1688 (concat "*display " number "*")) | |
1689 (progn (kill-buffer | |
1690 (get-buffer (concat "*display " number "*"))) | |
1691 (delete-frame (car frames)) | |
1692 (throw 'frame-found nil))) | |
1693 (setq frames (cdr frames)))))))))) | |
1694 | 1703 |
1695 (defvar gdb-expressions-mode-map | 1704 (defvar gdb-expressions-mode-map |
1696 (let ((map (make-sparse-keymap))) | 1705 (let ((map (make-sparse-keymap))) |
1697 (suppress-keymap map) | 1706 (suppress-keymap map) |
1698 (define-key map "v" 'gdb-array-visualise) | 1707 (define-key map "v" 'gdb-array-visualise) |
1944 (delete-other-windows) | 1953 (delete-other-windows) |
1945 (if gdb-many-windows | 1954 (if gdb-many-windows |
1946 (gdb-setup-windows) | 1955 (gdb-setup-windows) |
1947 (gdb-display-breakpoints-buffer) | 1956 (gdb-display-breakpoints-buffer) |
1948 (gdb-display-stack-buffer) | 1957 (gdb-display-stack-buffer) |
1958 (gdb-display-display-buffer) | |
1949 (delete-other-windows) | 1959 (delete-other-windows) |
1950 (split-window) | 1960 (split-window) |
1951 (other-window 1) | 1961 (other-window 1) |
1952 (switch-to-buffer (gud-find-file gdb-main-file)) | 1962 (switch-to-buffer (gud-find-file gdb-main-file)) |
1953 (setq gdb-source-window (get-buffer-window (current-buffer))) | 1963 (setq gdb-source-window (get-buffer-window (current-buffer))) |
2052 (defun gdb-delete-display () | 2062 (defun gdb-delete-display () |
2053 "Delete displayed expression and its frame." | 2063 "Delete displayed expression and its frame." |
2054 (interactive) | 2064 (interactive) |
2055 (gdb-enqueue-input | 2065 (gdb-enqueue-input |
2056 (list (concat "server delete display " gdb-display-number "\n") | 2066 (list (concat "server delete display " gdb-display-number "\n") |
2057 'ignore)) | 2067 'ignore))) |
2058 (kill-buffer nil) | |
2059 (delete-frame)) | |
2060 | 2068 |
2061 ;; | 2069 ;; |
2062 ;; Assembler buffer. | 2070 ;; Assembler buffer. |
2063 ;; | 2071 ;; |
2064 (gdb-set-buffer-rules 'gdb-assembler-buffer | 2072 (gdb-set-buffer-rules 'gdb-assembler-buffer |
2081 (remove-arrow) | 2089 (remove-arrow) |
2082 (goto-char (point-min)) | 2090 (goto-char (point-min)) |
2083 (re-search-forward gdb-current-address) | 2091 (re-search-forward gdb-current-address) |
2084 (setq gdb-arrow-position (point)) | 2092 (setq gdb-arrow-position (point)) |
2085 (put-arrow "=>" gdb-arrow-position nil 'left-margin)))) | 2093 (put-arrow "=>" gdb-arrow-position nil 'left-margin)))) |
2086 | |
2087 ;; remove all breakpoint-icons in assembler buffer before updating. | 2094 ;; remove all breakpoint-icons in assembler buffer before updating. |
2088 (save-excursion | 2095 (save-excursion |
2089 (set-buffer buffer) | 2096 (set-buffer buffer) |
2090 (if (display-graphic-p) | 2097 (if (display-graphic-p) |
2091 (remove-images (point-min) (point-max)) | 2098 (remove-images (point-min) (point-max)) |
2173 (if (and (gdb-get-buffer 'gdb-assembler-buffer) | 2180 (if (and (gdb-get-buffer 'gdb-assembler-buffer) |
2174 (or (not (member 'gdb-invalidate-assembler | 2181 (or (not (member 'gdb-invalidate-assembler |
2175 (gdb-get-pending-triggers))) | 2182 (gdb-get-pending-triggers))) |
2176 (not (string-equal gdb-main-or-pc gdb-prev-main-or-pc)))) | 2183 (not (string-equal gdb-main-or-pc gdb-prev-main-or-pc)))) |
2177 (progn | 2184 (progn |
2178 | |
2179 ;; take previous disassemble command off the queue | 2185 ;; take previous disassemble command off the queue |
2180 (save-excursion | 2186 (save-excursion |
2181 (set-buffer gud-comint-buffer) | 2187 (set-buffer gud-comint-buffer) |
2182 (let ((queue gdb-idle-input-queue) (item)) | 2188 (let ((queue gdb-idle-input-queue) (item)) |
2183 (while queue | 2189 (while queue |
2184 (setq item (car queue)) | 2190 (setq item (car queue)) |
2185 (if (equal (cdr item) '(gdb-assembler-handler)) | 2191 (if (equal (cdr item) '(gdb-assembler-handler)) |
2186 (delete item gdb-idle-input-queue)) | 2192 (delete item gdb-idle-input-queue)) |
2187 (setq queue (cdr queue))))) | 2193 (setq queue (cdr queue))))) |
2188 | |
2189 (gdb-enqueue-idle-input | 2194 (gdb-enqueue-idle-input |
2190 (list (concat "server disassemble " gdb-main-or-pc "\n") | 2195 (list (concat "server disassemble " gdb-main-or-pc "\n") |
2191 'gdb-assembler-handler)) | 2196 'gdb-assembler-handler)) |
2192 (gdb-set-pending-triggers | 2197 (gdb-set-pending-triggers |
2193 (cons 'gdb-invalidate-assembler | 2198 (cons 'gdb-invalidate-assembler |