aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Roberts2003-06-18 22:37:40 +0000
committerNick Roberts2003-06-18 22:37:40 +0000
commit8a3b93ee3056b42b2bd09e9b4d5a850041246b87 (patch)
treee0540737e6f31615669ae7fbf7c05050e4b12e8f
parentdeaef2892996cd45d1cd00eca41db93238e20003 (diff)
downloademacs-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.el101
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
2165buffers." 2167buffers."
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)))