Mercurial > emacs
comparison lisp/progmodes/gdb-ui.el @ 67364:7736e7015779
(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.
author | Nick Roberts <nickrob@snap.net.nz> |
---|---|
date | Wed, 07 Dec 2005 23:05:47 +0000 |
parents | 568e3be4fb8c |
children | e81d8f1aa8fe 37d0562504bf |
comparison
equal
deleted
inserted
replaced
67363:87de4735ecc9 | 67364:7736e7015779 |
---|---|
108 (defvar gdb-overlay-arrow-position nil) | 108 (defvar gdb-overlay-arrow-position nil) |
109 (defvar gdb-server-prefix nil) | 109 (defvar gdb-server-prefix nil) |
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.") |
117 (defvar gdb-macro-info nil | 116 (defvar gdb-macro-info nil |
118 "Non-nil if GDB knows that the inferior includes preprocessor macro info.") | 117 "Non-nil if GDB knows that the inferior includes preprocessor macro info.") |
158 handlers.") | 157 handlers.") |
159 | 158 |
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 |
166 '( | 167 '( |
167 ;; var = (struct struct_tag) value | 168 ;; var = (struct struct_tag) value |
188 ) | 189 ) |
189 "Font lock keywords used in `gdb-local-mode'.") | 190 "Font lock keywords used in `gdb-local-mode'.") |
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).") |
198 | 197 |
199 ;;;###autoload | 198 ;;;###autoload |
349 (unless (looking-at "\\S-+.*(.*).*") | 348 (unless (looking-at "\\S-+.*(.*).*") |
350 (gdb-enqueue-input | 349 (gdb-enqueue-input |
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." | 354 |
355 (defun gdb-set-gud-minor-mode-existing-buffers () | |
356 "Create list of source files for current GDB session." | |
356 (goto-char (point-min)) | 357 (goto-char (point-min)) |
357 (unless (search-forward "No source file named " nil t) | 358 (when (search-forward "read in on demand:" nil t) |
358 (condition-case nil | 359 (while (re-search-forward gdb-source-file-regexp nil t) |
359 (gdb-enqueue-input | 360 (push (or (match-string 1) (match-string 2)) gdb-source-file-list)) |
360 (list (concat gdb-server-prefix "info source\n") | 361 (dolist (buffer (buffer-list)) |
361 `(lambda () (gdb-set-gud-minor-mode-1 ,buffer)))) | 362 (with-current-buffer buffer |
362 (error (setq gdb-find-file-unhook t))))) | 363 (when (and buffer-file-name |
363 | 364 (member (file-name-nondirectory buffer-file-name) |
364 (defun gdb-set-gud-minor-mode-1 (buffer) | 365 gdb-source-file-list)) |
365 (goto-char (point-min)) | 366 (set (make-local-variable 'gud-minor-mode) 'gdba) |
366 (when (and (search-forward "Located in " nil t) | 367 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map) |
367 (looking-at "\\S-+") | 368 (when gud-tooltip-mode |
368 (string-equal (buffer-file-name buffer) | 369 (make-local-variable 'gdb-define-alist) |
369 (match-string 0))) | 370 (gdb-create-define-alist) |
370 (with-current-buffer buffer | 371 (add-hook 'after-save-hook 'gdb-create-define-alist nil t))))))) |
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 | |
378 (defun gdb-set-gud-minor-mode-existing-buffers () | |
379 (dolist (buffer (buffer-list)) | |
380 (let ((file (buffer-file-name buffer))) | |
381 (if file | |
382 (progn | |
383 (gdb-enqueue-input | |
384 (list (concat gdb-server-prefix "list " | |
385 (file-name-nondirectory file) ":1\n") | |
386 `(lambda () (gdb-set-gud-minor-mode ,buffer))))))))) | |
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)) |
390 (varno (nth 1 var)) (expr)) | 375 (varno (nth 1 var)) (expr)) |
391 (string-match "\\(var[0-9]+\\)\\.\\(.*\\)" varno) | 376 (string-match "\\(var[0-9]+\\)\\.\\(.*\\)" varno) |
469 gdb-pending-triggers nil | 454 gdb-pending-triggers nil |
470 gdb-output-sink 'user | 455 gdb-output-sink 'user |
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 |
478 gdb-buffer-fringe-width (car (window-fringes))) | 462 gdb-buffer-fringe-width (car (window-fringes))) |
479 | 463 |
489 (defun gdb-init-2 () | 473 (defun gdb-init-2 () |
490 (if (eq window-system 'w32) | 474 (if (eq window-system 'w32) |
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" |
505 'gdb-get-register-names)) | 486 'gdb-get-register-names)) |
506 ; Needs GDB 6.2 onwards. | 487 ; Needs GDB 6.2 onwards. |
507 (gdb-enqueue-input | 488 (gdb-enqueue-input |
508 (list "server interpreter mi \"-file-list-exec-source-files\"\n" | 489 (list "server interpreter mi \"-file-list-exec-source-files\"\n" |
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)) |
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)) | |
511 | 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 () |
515 (goto-char (point-min)) | 501 (goto-char (point-min)) |
2687 (if (and (buffer-name gud-comint-buffer) | 2673 (if (and (buffer-name gud-comint-buffer) |
2688 ;; in case gud or gdb-ui is just loaded | 2674 ;; in case gud or gdb-ui is just loaded |
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) |
2707 "Put string PUTSTRING in front of POS in the current buffer. | 2685 "Put string PUTSTRING in front of POS in the current buffer. |
2708 PUTSTRING is displayed by putting an overlay into the current buffer with a | 2686 PUTSTRING is displayed by putting an overlay into the current buffer with a |
2976 (setq gdb-frame-address (match-string 1)))) | 2954 (setq gdb-frame-address (match-string 1)))) |
2977 (goto-char (point-min)) | 2955 (goto-char (point-min)) |
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 |
2993 (when (member buffer-file-name gdb-source-file-list) | 2971 (when (member buffer-file-name gdb-source-file-list) |
2994 (set (make-local-variable 'gud-minor-mode) 'gdba) | 2972 (set (make-local-variable 'gud-minor-mode) 'gdba) |
3087 | 3065 |
3088 (defconst gdb-data-list-register-values-regexp | 3066 (defconst gdb-data-list-register-values-regexp |
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) |
3096 (with-current-buffer (gdb-get-buffer 'gdb-registers-buffer) | 3074 (with-current-buffer (gdb-get-buffer 'gdb-registers-buffer) |
3097 (let ((buffer-read-only nil)) | 3075 (let ((buffer-read-only nil)) |