diff options
| author | Nick Roberts | 2003-06-18 22:37:40 +0000 |
|---|---|---|
| committer | Nick Roberts | 2003-06-18 22:37:40 +0000 |
| commit | 8a3b93ee3056b42b2bd09e9b4d5a850041246b87 (patch) | |
| tree | e0540737e6f31615669ae7fbf7c05050e4b12e8f | |
| parent | deaef2892996cd45d1cd00eca41db93238e20003 (diff) | |
| download | emacs-8a3b93ee3056b42b2bd09e9b4d5a850041246b87.tar.gz emacs-8a3b93ee3056b42b2bd09e9b4d5a850041246b87.zip | |
(gud-display1): Keep the gdb command, "display", in
the command history.
(gdb-restore-windows): Make restore work when gdb-many-windows
is nil.
(gdb-source-info, gdba): Display assembler if there is no symbol
table for main, or message if there is no main.
(gdb-assembler-custom): Move point to current line of assembler.
| -rw-r--r-- | lisp/gdb-ui.el | 101 |
1 files changed, 54 insertions, 47 deletions
diff --git a/lisp/gdb-ui.el b/lisp/gdb-ui.el index 102a1ce1bf0..2373b51ea66 100644 --- a/lisp/gdb-ui.el +++ b/lisp/gdb-ui.el | |||
| @@ -41,10 +41,10 @@ | |||
| 41 | ;; developing the mode itself, then see the Annotations section in the GDB | 41 | ;; developing the mode itself, then see the Annotations section in the GDB |
| 42 | ;; info manual. | 42 | ;; info manual. |
| 43 | ;; | 43 | ;; |
| 44 | ;; Known Bugs: | 44 | ;; Known Bugs: |
| 45 | ;; Does not auto-display arrays of structures or structures containing arrays. | 45 | ;; Does not auto-display arrays of structures or structures containing arrays. |
| 46 | ;; On MS Windows, Gdb 5.1.1 from MinGW 2.0 does not flush the output from the | 46 | ;; On MS Windows, Gdb 5.1.1 from MinGW 2.0 does not flush the output from the |
| 47 | ;; inferior. | 47 | ;; inferior. |
| 48 | 48 | ||
| 49 | ;;; Code: | 49 | ;;; Code: |
| 50 | 50 | ||
| @@ -60,9 +60,10 @@ | |||
| 60 | :type 'integer | 60 | :type 'integer |
| 61 | :group 'gud) | 61 | :group 'gud) |
| 62 | 62 | ||
| 63 | (defvar gdb-current-address nil "Initialisation for Assembler buffer.") | 63 | (defvar gdb-current-address "main" "Initialisation for Assembler buffer.") |
| 64 | (defvar gdb-previous-address nil) | 64 | (defvar gdb-previous-address nil) |
| 65 | (defvar gdb-previous-frame nil) | 65 | (defvar gdb-previous-frame nil) |
| 66 | (defvar gdb-current-frame "main") | ||
| 66 | (defvar gdb-display-in-progress nil) | 67 | (defvar gdb-display-in-progress nil) |
| 67 | (defvar gdb-dive nil) | 68 | (defvar gdb-dive nil) |
| 68 | (defvar gdb-view-source t "Non-nil means that source code can be viewed") | 69 | (defvar gdb-view-source t "Non-nil means that source code can be viewed") |
| @@ -162,6 +163,7 @@ The following interactive lisp functions help control operation : | |||
| 162 | (setq gdb-current-address "main") | 163 | (setq gdb-current-address "main") |
| 163 | (setq gdb-previous-address nil) | 164 | (setq gdb-previous-address nil) |
| 164 | (setq gdb-previous-frame nil) | 165 | (setq gdb-previous-frame nil) |
| 166 | (setq gdb-current-frame "main") | ||
| 165 | (setq gdb-display-in-progress nil) | 167 | (setq gdb-display-in-progress nil) |
| 166 | (setq gdb-dive nil) | 168 | (setq gdb-dive nil) |
| 167 | (setq gdb-view-source t) | 169 | (setq gdb-view-source t) |
| @@ -176,7 +178,7 @@ The following interactive lisp functions help control operation : | |||
| 176 | (gdb-enqueue-input (list "set new-console off\n" 'ignore))) | 178 | (gdb-enqueue-input (list "set new-console off\n" 'ignore))) |
| 177 | (gdb-enqueue-input (list "set height 0\n" 'ignore)) | 179 | (gdb-enqueue-input (list "set height 0\n" 'ignore)) |
| 178 | ;; find source file and compilation directory here | 180 | ;; find source file and compilation directory here |
| 179 | (gdb-enqueue-input (list "server list\n" 'ignore)) ; C program | 181 | (gdb-enqueue-input (list "server list main\n" 'ignore)) ; C program |
| 180 | (gdb-enqueue-input (list "server list MAIN__\n" 'ignore)) ; Fortran program | 182 | (gdb-enqueue-input (list "server list MAIN__\n" 'ignore)) ; Fortran program |
| 181 | (gdb-enqueue-input (list "server info source\n" | 183 | (gdb-enqueue-input (list "server info source\n" |
| 182 | 'gdb-source-info)) | 184 | 'gdb-source-info)) |
| @@ -201,9 +203,9 @@ The following interactive lisp functions help control operation : | |||
| 201 | (goto-char (- (point-max) 1)) | 203 | (goto-char (- (point-max) 1)) |
| 202 | (if (equal (char-before) (string-to-char "\*")) | 204 | (if (equal (char-before) (string-to-char "\*")) |
| 203 | (gdb-enqueue-input | 205 | (gdb-enqueue-input |
| 204 | (list (concat "server display* " expr "\n") 'ignore)) | 206 | (list (concat "display* " expr "\n") 'ignore)) |
| 205 | (gdb-enqueue-input | 207 | (gdb-enqueue-input |
| 206 | (list (concat "server display " expr "\n") 'ignore))))) | 208 | (list (concat "display " expr "\n") 'ignore))))) |
| 207 | 209 | ||
| 208 | ; this would messy because these bindings don't work with M-x gdb | 210 | ; this would messy because these bindings don't work with M-x gdb |
| 209 | ; (define-key global-map "\C-x\C-a\C-a" 'gud-display) | 211 | ; (define-key global-map "\C-x\C-a\C-a" 'gud-display) |
| @@ -744,7 +746,6 @@ output from the current command if that happens to be appropriate." | |||
| 744 | (set-buffer (gdb-get-buffer 'gdb-partial-output-buffer)) | 746 | (set-buffer (gdb-get-buffer 'gdb-partial-output-buffer)) |
| 745 | (setq gdb-dive nil)) | 747 | (setq gdb-dive nil)) |
| 746 | 748 | ||
| 747 | (defvar gdb-current-frame nil) | ||
| 748 | (defvar gdb-nesting-level) | 749 | (defvar gdb-nesting-level) |
| 749 | (defvar gdb-expression) | 750 | (defvar gdb-expression) |
| 750 | (defvar gdb-point) | 751 | (defvar gdb-point) |
| @@ -2049,27 +2050,27 @@ the source buffer." | |||
| 2049 | (gdb-display-buffer | 2050 | (gdb-display-buffer |
| 2050 | (gdb-get-create-buffer 'gdba))) | 2051 | (gdb-get-create-buffer 'gdba))) |
| 2051 | 2052 | ||
| 2053 | (defvar gdb-main-file nil "Source file from which program execution begins.") | ||
| 2054 | |||
| 2052 | (defun gdb-view-source() | 2055 | (defun gdb-view-source() |
| 2053 | (interactive) | 2056 | (interactive) |
| 2054 | (if gdb-view-source | 2057 | (if gdb-view-source |
| 2055 | (if gud-last-last-frame | 2058 | (if gud-last-last-frame |
| 2056 | (set-window-buffer gdb-source-window | 2059 | (set-window-buffer gdb-source-window |
| 2057 | (gud-find-file (car gud-last-last-frame))) | 2060 | (gud-find-file (car gud-last-last-frame))) |
| 2058 | (set-window-buffer gdb-source-window (gud-find-file gdb-main-file)))) | 2061 | (set-window-buffer gdb-source-window (gud-find-file gdb-main-file)))) |
| 2059 | (setq gdb-selected-view 'source)) | 2062 | (setq gdb-selected-view 'source)) |
| 2060 | 2063 | ||
| 2061 | (defun gdb-view-assembler() | 2064 | (defun gdb-view-assembler() |
| 2062 | (interactive) | 2065 | (interactive) |
| 2063 | (set-window-buffer gdb-source-window | 2066 | (set-window-buffer gdb-source-window |
| 2064 | (gdb-get-create-buffer 'gdb-assembler-buffer)) | 2067 | (gdb-get-create-buffer 'gdb-assembler-buffer)) |
| 2065 | (setq gdb-selected-view 'assembler)) | 2068 | (setq gdb-selected-view 'assembler)) |
| 2066 | 2069 | ||
| 2067 | ;(defun gdb-view-both() | 2070 | ;(defun gdb-view-both() |
| 2068 | ;(interactive) | 2071 | ;(interactive) |
| 2069 | ;(setq gdb-selected-view 'both)) | 2072 | ;(setq gdb-selected-view 'both)) |
| 2070 | 2073 | ||
| 2071 | (defvar gdb-main-file nil "Source file from which program execution begins.") | ||
| 2072 | |||
| 2073 | ;; layout for all the windows | 2074 | ;; layout for all the windows |
| 2074 | (defun gdb-setup-windows () | 2075 | (defun gdb-setup-windows () |
| 2075 | (gdb-display-locals-buffer) | 2076 | (gdb-display-locals-buffer) |
| @@ -2135,6 +2136,7 @@ This arrangement depends on the value of `gdb-many-windows'." | |||
| 2135 | (gud-find-file (car gud-last-last-frame)) | 2136 | (gud-find-file (car gud-last-last-frame)) |
| 2136 | (gud-find-file gdb-main-file))) | 2137 | (gud-find-file gdb-main-file))) |
| 2137 | (switch-to-buffer (gdb-get-create-buffer 'gdb-assembler-buffer))) | 2138 | (switch-to-buffer (gdb-get-create-buffer 'gdb-assembler-buffer))) |
| 2139 | (setq gdb-source-window (get-buffer-window (current-buffer))) | ||
| 2138 | (other-window 1))) | 2140 | (other-window 1))) |
| 2139 | 2141 | ||
| 2140 | (defun gdb-reset () | 2142 | (defun gdb-reset () |
| @@ -2164,29 +2166,30 @@ This arrangement depends on the value of `gdb-many-windows'." | |||
| 2164 | "Find the source file where the program starts and displays it with related | 2166 | "Find the source file where the program starts and displays it with related |
| 2165 | buffers." | 2167 | buffers." |
| 2166 | (goto-char (point-min)) | 2168 | (goto-char (point-min)) |
| 2167 | (when (search-forward "directory is " nil t) | 2169 | (if (search-forward "directory is " nil t) |
| 2168 | (if (looking-at "\\S-*:\\(\\S-*\\)") | 2170 | (progn |
| 2169 | (setq gdb-cdir (match-string 1)) | 2171 | (if (looking-at "\\S-*:\\(\\S-*\\)") |
| 2170 | (looking-at "\\S-*") | 2172 | (setq gdb-cdir (match-string 1)) |
| 2171 | (setq gdb-cdir (match-string 0))) | 2173 | (looking-at "\\S-*") |
| 2172 | (search-forward "Located in ") | 2174 | (setq gdb-cdir (match-string 0))) |
| 2173 | (looking-at "\\S-*") | 2175 | (search-forward "Located in ") |
| 2174 | (setq gdb-main-file (match-string 0)) | 2176 | (looking-at "\\S-*") |
| 2175 | ;; Make sure we are not in the minibuffer window when we try to delete | 2177 | (setq gdb-main-file (match-string 0))) |
| 2176 | ;; all other windows. | 2178 | (setq gdb-view-source nil)) |
| 2177 | (if (window-minibuffer-p (selected-window)) | 2179 | (delete-other-windows) |
| 2178 | (other-window 1)) | 2180 | (if gdb-many-windows |
| 2181 | (gdb-setup-windows) | ||
| 2182 | (gdb-display-breakpoints-buffer) | ||
| 2183 | (gdb-display-display-buffer) | ||
| 2179 | (delete-other-windows) | 2184 | (delete-other-windows) |
| 2180 | (if gdb-many-windows | 2185 | (split-window) |
| 2181 | (gdb-setup-windows) | 2186 | (other-window 1) |
| 2182 | (gdb-display-breakpoints-buffer) | 2187 | (if gdb-view-source |
| 2183 | (gdb-display-display-buffer) | 2188 | (switch-to-buffer (gud-find-file gdb-main-file)) |
| 2184 | (delete-other-windows) | 2189 | (switch-to-buffer (gdb-get-create-buffer 'gdb-assembler-buffer)) |
| 2185 | (split-window) | 2190 | (gdb-invalidate-assembler)) |
| 2186 | (other-window 1) | 2191 | (setq gdb-source-window (get-buffer-window (current-buffer))) |
| 2187 | (switch-to-buffer (gud-find-file gdb-main-file)) | 2192 | (other-window 1))) |
| 2188 | (setq gdb-source-window (get-buffer-window (current-buffer))) | ||
| 2189 | (other-window 1)))) | ||
| 2190 | 2193 | ||
| 2191 | ;;from put-image | 2194 | ;;from put-image |
| 2192 | (defun gdb-put-string (putstring pos) | 2195 | (defun gdb-put-string (putstring pos) |
| @@ -2294,14 +2297,16 @@ BUFFER nil or omitted means use the current buffer." | |||
| 2294 | 2297 | ||
| 2295 | (defun gdb-assembler-custom () | 2298 | (defun gdb-assembler-custom () |
| 2296 | (let ((buffer (gdb-get-buffer 'gdb-assembler-buffer)) | 2299 | (let ((buffer (gdb-get-buffer 'gdb-assembler-buffer)) |
| 2297 | (address) (flag)) | 2300 | (gdb-arrow-position 1) (address) (flag)) |
| 2298 | (with-current-buffer buffer | 2301 | (with-current-buffer buffer |
| 2299 | (if (not (equal gdb-current-address "main")) | 2302 | (if (not (equal gdb-current-address "main")) |
| 2300 | (progn | 2303 | (progn |
| 2301 | (gdb-remove-arrow) | 2304 | (gdb-remove-arrow) |
| 2302 | (goto-char (point-min)) | 2305 | (goto-char (point-min)) |
| 2303 | (if (re-search-forward gdb-current-address nil t) | 2306 | (if (re-search-forward gdb-current-address nil t) |
| 2304 | (gdb-put-arrow "=>" (point))))) | 2307 | (progn |
| 2308 | (setq gdb-arrow-position (point)) | ||
| 2309 | (gdb-put-arrow "=>" (point)))))) | ||
| 2305 | ;; remove all breakpoint-icons in assembler buffer before updating. | 2310 | ;; remove all breakpoint-icons in assembler buffer before updating. |
| 2306 | (if (eq window-system 'x) | 2311 | (if (eq window-system 'x) |
| 2307 | (remove-images (point-min) (point-max)) | 2312 | (remove-images (point-min) (point-max)) |
| @@ -2339,7 +2344,9 @@ BUFFER nil or omitted means use the current buffer." | |||
| 2339 | (gdb-remove-strings start end) | 2344 | (gdb-remove-strings start end) |
| 2340 | (if (eq ?y flag) | 2345 | (if (eq ?y flag) |
| 2341 | (gdb-put-string "B" (+ start 1)) | 2346 | (gdb-put-string "B" (+ start 1)) |
| 2342 | (gdb-put-string "b" (+ start 1))))))))))))) | 2347 | (gdb-put-string "b" (+ start 1))))))))))) |
| 2348 | (if (not (equal gdb-current-address "main")) | ||
| 2349 | (set-window-point (get-buffer-window buffer) gdb-arrow-position)))) | ||
| 2343 | 2350 | ||
| 2344 | (defvar gdb-assembler-mode-map | 2351 | (defvar gdb-assembler-mode-map |
| 2345 | (let ((map (make-sparse-keymap))) | 2352 | (let ((map (make-sparse-keymap))) |