aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Roberts2005-12-07 23:05:47 +0000
committerNick Roberts2005-12-07 23:05:47 +0000
commitc05ba08101692e9759f169d81fb5eea28156e8d2 (patch)
tree7cc0805bb0edc0cbda6675a7c87e2086c878803a
parent225c13a5d7b22a14907d3e8a7faf72198d95f905 (diff)
downloademacs-c05ba08101692e9759f169d81fb5eea28156e8d2.tar.gz
emacs-c05ba08101692e9759f169d81fb5eea28156e8d2.zip
(gdb-find-file-unhook): Delete variable.
(gdb-set-gud-minor-mode, gdb-set-gud-minor-mode): Delete functions. (gdb-set-gud-minor-mode-existing-buffers, gdb-init-2): Use GDB command "info sources". Move calls to GDB command "list". (gdb-find-file-hook): Just use gdb-source-file-list. (gdb-source-file-regexp): Use regexp for pre-GDB 6.4. (gdb-source-file-regexp-1): New regexp for GDB 6.4+ only. (gdb-set-gud-minor-mode-existing-buffers-1): Use it. (gdb-data-list-register-values-handler): Use correct trigger name.
-rw-r--r--lisp/progmodes/gdb-ui.el90
1 files changed, 34 insertions, 56 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index 680c879a9e2..db847b74cf5 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -110,7 +110,6 @@
110(defvar gdb-flush-pending-output nil) 110(defvar gdb-flush-pending-output nil)
111(defvar gdb-location-alist nil 111(defvar gdb-location-alist nil
112 "Alist of breakpoint numbers and full filenames.") 112 "Alist of breakpoint numbers and full filenames.")
113(defvar gdb-find-file-unhook nil)
114(defvar gdb-active-process nil "GUD tooltips display variable values when t, \ 113(defvar gdb-active-process nil "GUD tooltips display variable values when t, \
115and #define directives otherwise.") 114and #define directives otherwise.")
116(defvar gdb-error "Non-nil when GDB is reporting an error.") 115(defvar gdb-error "Non-nil when GDB is reporting an error.")
@@ -160,6 +159,8 @@ handlers.")
160(defvar gdb-first-post-prompt nil) 159(defvar gdb-first-post-prompt nil)
161(defvar gdb-version nil) 160(defvar gdb-version nil)
162(defvar gdb-locals-font-lock-keywords nil) 161(defvar gdb-locals-font-lock-keywords nil)
162(defvar gdb-source-file-list nil
163 "List of source files for the current executable")
163(defconst gdb-error-regexp "\\^error,msg=\"\\(.+\\)\"") 164(defconst gdb-error-regexp "\\^error,msg=\"\\(.+\\)\"")
164 165
165(defvar gdb-locals-font-lock-keywords-1 166(defvar gdb-locals-font-lock-keywords-1
@@ -190,8 +191,6 @@ handlers.")
190 191
191;; Variables for GDB 6.4+ 192;; Variables for GDB 6.4+
192 193
193(defvar gdb-source-file-list nil
194 "List of source files for the current executable")
195(defvar gdb-register-names nil "List of register names.") 194(defvar gdb-register-names nil "List of register names.")
196(defvar gdb-changed-registers nil 195(defvar gdb-changed-registers nil
197 "List of changed register numbers (strings).") 196 "List of changed register numbers (strings).")
@@ -351,39 +350,25 @@ With arg, use separate IO iff arg is positive."
351 (list (concat gdb-server-prefix "print " expr "\n") 350 (list (concat gdb-server-prefix "print " expr "\n")
352 'gdb-tooltip-print)))))) 351 'gdb-tooltip-print))))))
353 352
354(defun gdb-set-gud-minor-mode (buffer) 353(defconst gdb-source-file-regexp "\\(.+?\\), \\|\\([^, \n].*$\\)")
355 "Set `gud-minor-mode' from find-file if appropriate."
356 (goto-char (point-min))
357 (unless (search-forward "No source file named " nil t)
358 (condition-case nil
359 (gdb-enqueue-input
360 (list (concat gdb-server-prefix "info source\n")
361 `(lambda () (gdb-set-gud-minor-mode-1 ,buffer))))
362 (error (setq gdb-find-file-unhook t)))))
363
364(defun gdb-set-gud-minor-mode-1 (buffer)
365 (goto-char (point-min))
366 (when (and (search-forward "Located in " nil t)
367 (looking-at "\\S-+")
368 (string-equal (buffer-file-name buffer)
369 (match-string 0)))
370 (with-current-buffer buffer
371 (set (make-local-variable 'gud-minor-mode) 'gdba)
372 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
373 (when gud-tooltip-mode
374 (make-local-variable 'gdb-define-alist)
375 (gdb-create-define-alist)
376 (add-hook 'after-save-hook 'gdb-create-define-alist nil t)))))
377 354
378(defun gdb-set-gud-minor-mode-existing-buffers () 355(defun gdb-set-gud-minor-mode-existing-buffers ()
379 (dolist (buffer (buffer-list)) 356 "Create list of source files for current GDB session."
380 (let ((file (buffer-file-name buffer))) 357 (goto-char (point-min))
381 (if file 358 (when (search-forward "read in on demand:" nil t)
382 (progn 359 (while (re-search-forward gdb-source-file-regexp nil t)
383 (gdb-enqueue-input 360 (push (or (match-string 1) (match-string 2)) gdb-source-file-list))
384 (list (concat gdb-server-prefix "list " 361 (dolist (buffer (buffer-list))
385 (file-name-nondirectory file) ":1\n") 362 (with-current-buffer buffer
386 `(lambda () (gdb-set-gud-minor-mode ,buffer))))))))) 363 (when (and buffer-file-name
364 (member (file-name-nondirectory buffer-file-name)
365 gdb-source-file-list))
366 (set (make-local-variable 'gud-minor-mode) 'gdba)
367 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
368 (when gud-tooltip-mode
369 (make-local-variable 'gdb-define-alist)
370 (gdb-create-define-alist)
371 (add-hook 'after-save-hook 'gdb-create-define-alist nil t)))))))
387 372
388(defun gdb-find-watch-expression () 373(defun gdb-find-watch-expression ()
389 (let* ((var (nth (- (line-number-at-pos (point)) 2) gdb-var-list)) 374 (let* ((var (nth (- (line-number-at-pos (point)) 2) gdb-var-list))
@@ -471,7 +456,6 @@ With arg, use separate IO iff arg is positive."
471 gdb-server-prefix "server " 456 gdb-server-prefix "server "
472 gdb-flush-pending-output nil 457 gdb-flush-pending-output nil
473 gdb-location-alist nil 458 gdb-location-alist nil
474 gdb-find-file-unhook nil
475 gdb-source-file-list nil 459 gdb-source-file-list nil
476 gdb-error nil 460 gdb-error nil
477 gdb-macro-info nil 461 gdb-macro-info nil
@@ -491,14 +475,11 @@ With arg, use separate IO iff arg is positive."
491 (gdb-enqueue-input (list "set new-console off\n" 'ignore))) 475 (gdb-enqueue-input (list "set new-console off\n" 'ignore)))
492 (gdb-enqueue-input (list "set height 0\n" 'ignore)) 476 (gdb-enqueue-input (list "set height 0\n" 'ignore))
493 (gdb-enqueue-input (list "set width 0\n" 'ignore)) 477 (gdb-enqueue-input (list "set width 0\n" 'ignore))
494 ;; find source file and compilation directory here
495 (gdb-enqueue-input (list "server list main\n" 'ignore)) ; C program
496 (gdb-enqueue-input (list "server list MAIN__\n" 'ignore)) ; Fortran program
497 (gdb-enqueue-input (list "server info source\n" 'gdb-source-info))
498 478
499 (if (string-equal gdb-version "pre-6.4") 479 (if (string-equal gdb-version "pre-6.4")
500 (progn 480 (progn
501 (gdb-set-gud-minor-mode-existing-buffers) 481 (gdb-enqueue-input (list (concat gdb-server-prefix "info sources\n")
482 'gdb-set-gud-minor-mode-existing-buffers))
502 (setq gdb-locals-font-lock-keywords gdb-locals-font-lock-keywords-1)) 483 (setq gdb-locals-font-lock-keywords gdb-locals-font-lock-keywords-1))
503 (gdb-enqueue-input 484 (gdb-enqueue-input
504 (list "server interpreter mi -data-list-register-names\n" 485 (list "server interpreter mi -data-list-register-names\n"
@@ -509,6 +490,11 @@ With arg, use separate IO iff arg is positive."
509 'gdb-set-gud-minor-mode-existing-buffers-1)) 490 'gdb-set-gud-minor-mode-existing-buffers-1))
510 (setq gdb-locals-font-lock-keywords gdb-locals-font-lock-keywords-2)) 491 (setq gdb-locals-font-lock-keywords gdb-locals-font-lock-keywords-2))
511 492
493 ;; find source file and compilation directory here
494 (gdb-enqueue-input (list "server list main\n" 'ignore)) ; C program
495 (gdb-enqueue-input (list "server list MAIN__\n" 'ignore)) ; Fortran program
496 (gdb-enqueue-input (list "server info source\n" 'gdb-source-info))
497
512 (run-hooks 'gdba-mode-hook)) 498 (run-hooks 'gdba-mode-hook))
513 499
514(defun gdb-get-version () 500(defun gdb-get-version ()
@@ -2689,18 +2675,10 @@ of the current session."
2689 gud-comint-buffer 2675 gud-comint-buffer
2690 (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 2676 (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
2691 'gdba)) 2677 'gdba))
2692 (if (string-equal gdb-version "pre-6.4") 2678 (if (member buffer-file-name gdb-source-file-list)
2693 (condition-case nil 2679 (with-current-buffer (find-buffer-visiting buffer-file-name)
2694 (gdb-enqueue-input 2680 (set (make-local-variable 'gud-minor-mode) 'gdba)
2695 (list (concat gdb-server-prefix "list " 2681 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)))))
2696 (file-name-nondirectory buffer-file-name)
2697 ":1\n")
2698 `(lambda () (gdb-set-gud-minor-mode ,(current-buffer)))))
2699 (error (setq gdb-find-file-unhook t)))
2700 (if (member buffer-file-name gdb-source-file-list)
2701 (with-current-buffer (find-buffer-visiting buffer-file-name)
2702 (set (make-local-variable 'gud-minor-mode) 'gdba)
2703 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map))))))
2704 2682
2705;;from put-image 2683;;from put-image
2706(defun gdb-put-string (putstring pos &optional dprop &rest sprops) 2684(defun gdb-put-string (putstring pos &optional dprop &rest sprops)
@@ -2978,15 +2956,15 @@ BUFFER nil or omitted means use the current buffer."
2978 (if (re-search-forward " source language \\(\\S-*\\)\." nil t) 2956 (if (re-search-forward " source language \\(\\S-*\\)\." nil t)
2979 (setq gdb-current-language (match-string 1))) 2957 (setq gdb-current-language (match-string 1)))
2980 (gdb-invalidate-assembler)) 2958 (gdb-invalidate-assembler))
2959
2981 2960
2982;; Code specific to GDB 6.4 2961;; Code specific to GDB 6.4
2983 2962(defconst gdb-source-file-regexp-1 "fullname=\"\\(.*?\\)\"")
2984(defconst gdb-source-file-regexp "fullname=\"\\(.*?\\)\"")
2985 2963
2986(defun gdb-set-gud-minor-mode-existing-buffers-1 () 2964(defun gdb-set-gud-minor-mode-existing-buffers-1 ()
2987 "Create list of source files for current GDB session." 2965 "Create list of source files for current GDB session."
2988 (goto-char (point-min)) 2966 (goto-char (point-min))
2989 (while (re-search-forward gdb-source-file-regexp nil t) 2967 (while (re-search-forward gdb-source-file-regexp-1 nil t)
2990 (push (match-string 1) gdb-source-file-list)) 2968 (push (match-string 1) gdb-source-file-list))
2991 (dolist (buffer (buffer-list)) 2969 (dolist (buffer (buffer-list))
2992 (with-current-buffer buffer 2970 (with-current-buffer buffer
@@ -3089,7 +3067,7 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
3089 "number=\"\\(.*?\\)\",value=\"\\(.*?\\)\"") 3067 "number=\"\\(.*?\\)\",value=\"\\(.*?\\)\"")
3090 3068
3091(defun gdb-data-list-register-values-handler () 3069(defun gdb-data-list-register-values-handler ()
3092 (setq gdb-pending-triggers (delq 'gdb-invalidate-registers 3070 (setq gdb-pending-triggers (delq 'gdb-invalidate-registers-1
3093 gdb-pending-triggers)) 3071 gdb-pending-triggers))
3094 (goto-char (point-min)) 3072 (goto-char (point-min))
3095 (if (re-search-forward gdb-error-regexp nil t) 3073 (if (re-search-forward gdb-error-regexp nil t)