diff options
| author | Nick Roberts | 2005-12-07 23:05:47 +0000 |
|---|---|---|
| committer | Nick Roberts | 2005-12-07 23:05:47 +0000 |
| commit | c05ba08101692e9759f169d81fb5eea28156e8d2 (patch) | |
| tree | 7cc0805bb0edc0cbda6675a7c87e2086c878803a | |
| parent | 225c13a5d7b22a14907d3e8a7faf72198d95f905 (diff) | |
| download | emacs-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.el | 90 |
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, \ |
| 115 | and #define directives otherwise.") | 114 | and #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) |