Mercurial > emacs
comparison lisp/progmodes/gdb-ui.el @ 68902:5de231ae5dc9
(gdb-use-separate-io-buffer)
(gdb-display-separate-io-buffer, gdb-frame-separate-io-buffer)
(gdb-separate-io-interrupt, gdb-separate-io-quit)
(gdb-separate-io-stop, gdb-separate-io-eof):
Rename from gdb-inferior-* to gdb-separate-*.
(gdb-set-gud-minor-mode-existing-buffers-1): Improve doc string.
author | Nick Roberts <nickrob@snap.net.nz> |
---|---|
date | Tue, 14 Feb 2006 22:03:20 +0000 |
parents | 47f77ab239fc |
children | 57fa3643220b |
comparison
equal
deleted
inserted
replaced
68901:95d4c7a9dca8 | 68902:5de231ae5dc9 |
---|---|
183 (3 font-lock-type-face)) | 183 (3 font-lock-type-face)) |
184 ) | 184 ) |
185 "Font lock keywords used in `gdb-local-mode'.") | 185 "Font lock keywords used in `gdb-local-mode'.") |
186 | 186 |
187 ;; Variables for GDB 6.4+ | 187 ;; Variables for GDB 6.4+ |
188 | |
189 (defvar gdb-register-names nil "List of register names.") | 188 (defvar gdb-register-names nil "List of register names.") |
190 (defvar gdb-changed-registers nil | 189 (defvar gdb-changed-registers nil |
191 "List of changed register numbers (strings).") | 190 "List of changed register numbers (strings).") |
192 | 191 |
193 ;;;###autoload | 192 ;;;###autoload |
201 it starts with two windows: one displaying the GUD buffer and the | 200 it starts with two windows: one displaying the GUD buffer and the |
202 other with the source file with the main routine of the inferior. | 201 other with the source file with the main routine of the inferior. |
203 | 202 |
204 If `gdb-many-windows' is t, regardless of the value of | 203 If `gdb-many-windows' is t, regardless of the value of |
205 `gdb-show-main', the layout below will appear unless | 204 `gdb-show-main', the layout below will appear unless |
206 `gdb-use-inferior-io-buffer' is nil when the source buffer | 205 `gdb-use-separate-io-buffer' is nil when the source buffer |
207 occupies the full width of the frame. Keybindings are given in | 206 occupies the full width of the frame. Keybindings are given in |
208 relevant buffer. | 207 relevant buffer. |
209 | 208 |
210 Watch expressions appear in the speedbar/slowbar. | 209 Watch expressions appear in the speedbar/slowbar. |
211 | 210 |
279 Also display the main routine in the disassembly buffer if present." | 278 Also display the main routine in the disassembly buffer if present." |
280 :type 'boolean | 279 :type 'boolean |
281 :group 'gud | 280 :group 'gud |
282 :version "22.1") | 281 :version "22.1") |
283 | 282 |
284 (defcustom gdb-use-inferior-io-buffer nil | 283 (defcustom gdb-use-separate-io-buffer nil |
285 "Non-nil means display output from the inferior in a separate buffer." | 284 "Non-nil means display output from the inferior in a separate buffer." |
286 :type 'boolean | 285 :type 'boolean |
287 :group 'gud | 286 :group 'gud |
288 :version "22.1") | 287 :version "22.1") |
289 | 288 |
290 (defun gdb-use-inferior-io-buffer (arg) | 289 (defun gdb-use-separate-io-buffer (arg) |
291 "Toggle separate IO for inferior. | 290 "Toggle separate IO for inferior. |
292 With arg, use separate IO iff arg is positive." | 291 With arg, use separate IO iff arg is positive." |
293 (interactive "P") | 292 (interactive "P") |
294 (setq gdb-use-inferior-io-buffer | 293 (setq gdb-use-separate-io-buffer |
295 (if (null arg) | 294 (if (null arg) |
296 (not gdb-use-inferior-io-buffer) | 295 (not gdb-use-separate-io-buffer) |
297 (> (prefix-numeric-value arg) 0))) | 296 (> (prefix-numeric-value arg) 0))) |
298 (message (format "Separate inferior IO %sabled" | 297 (message (format "Separate inferior IO %sabled" |
299 (if gdb-use-inferior-io-buffer "en" "dis"))) | 298 (if gdb-use-separate-io-buffer "en" "dis"))) |
300 (if (and gud-comint-buffer | 299 (if (and gud-comint-buffer |
301 (buffer-name gud-comint-buffer)) | 300 (buffer-name gud-comint-buffer)) |
302 (condition-case nil | 301 (condition-case nil |
303 (if gdb-use-inferior-io-buffer | 302 (if gdb-use-separate-io-buffer |
304 (gdb-restore-windows) | 303 (gdb-restore-windows) |
305 (kill-buffer (gdb-inferior-io-name))) | 304 (kill-buffer (gdb-inferior-io-name))) |
306 (error nil)))) | 305 (error nil)))) |
307 | 306 |
308 (defvar gdb-define-alist nil "Alist of #define directives for GUD tooltips.") | 307 (defvar gdb-define-alist nil "Alist of #define directives for GUD tooltips.") |
460 gdb-macro-info nil | 459 gdb-macro-info nil |
461 gdb-buffer-fringe-width (car (window-fringes))) | 460 gdb-buffer-fringe-width (car (window-fringes))) |
462 | 461 |
463 (setq gdb-buffer-type 'gdba) | 462 (setq gdb-buffer-type 'gdba) |
464 | 463 |
465 (if gdb-use-inferior-io-buffer (gdb-clear-inferior-io)) | 464 (if gdb-use-separate-io-buffer (gdb-clear-inferior-io)) |
466 | 465 |
467 ;; Hack to see test for GDB 6.4+ (-stack-info-frame was implemented in 6.4) | 466 ;; Hack to see test for GDB 6.4+ (-stack-info-frame was implemented in 6.4) |
468 (setq gdb-version nil) | 467 (setq gdb-version nil) |
469 (gdb-enqueue-input (list "server interpreter mi -stack-info-frame\n" | 468 (gdb-enqueue-input (list "server interpreter mi -stack-info-frame\n" |
470 'gdb-get-version))) | 469 'gdb-get-version))) |
851 (defun gdb-inferior-io-name () | 850 (defun gdb-inferior-io-name () |
852 (concat "*input/output of " | 851 (concat "*input/output of " |
853 (gdb-get-target-string) | 852 (gdb-get-target-string) |
854 "*")) | 853 "*")) |
855 | 854 |
856 (defun gdb-display-inferior-io-buffer () | 855 (defun gdb-display-separate-io-buffer () |
857 "Display IO of inferior in a separate window." | 856 "Display IO of inferior in a separate window." |
858 (interactive) | 857 (interactive) |
859 (if gdb-use-inferior-io-buffer | 858 (if gdb-use-inferior-io-buffer |
860 (gdb-display-buffer | 859 (gdb-display-buffer |
861 (gdb-get-create-buffer 'gdb-inferior-io)))) | 860 (gdb-get-create-buffer 'gdb-inferior-io)))) |
865 (unsplittable . t) | 864 (unsplittable . t) |
866 (tool-bar-lines . nil) | 865 (tool-bar-lines . nil) |
867 (menu-bar-lines . nil) | 866 (menu-bar-lines . nil) |
868 (minibuffer . nil))) | 867 (minibuffer . nil))) |
869 | 868 |
870 (defun gdb-frame-inferior-io-buffer () | 869 (defun gdb-frame-separate-io-buffer () |
871 "Display IO of inferior in a new frame." | 870 "Display IO of inferior in a new frame." |
872 (interactive) | 871 (interactive) |
873 (if gdb-use-inferior-io-buffer | 872 (if gdb-use-separate-io-buffer |
874 (let ((special-display-regexps (append special-display-regexps '(".*"))) | 873 (let ((special-display-regexps (append special-display-regexps '(".*"))) |
875 (special-display-frame-alist gdb-frame-parameters)) | 874 (special-display-frame-alist gdb-frame-parameters)) |
876 (display-buffer (gdb-get-create-buffer 'gdb-inferior-io))))) | 875 (display-buffer (gdb-get-create-buffer 'gdb-inferior-io))))) |
877 | 876 |
878 (defvar gdb-inferior-io-mode-map | 877 (defvar gdb-inferior-io-mode-map |
879 (let ((map (make-sparse-keymap))) | 878 (let ((map (make-sparse-keymap))) |
880 (define-key map "\C-c\C-c" 'gdb-inferior-io-interrupt) | 879 (define-key map "\C-c\C-c" 'gdb-separate-io-interrupt) |
881 (define-key map "\C-c\C-z" 'gdb-inferior-io-stop) | 880 (define-key map "\C-c\C-z" 'gdb-separate-io-stop) |
882 (define-key map "\C-c\C-\\" 'gdb-inferior-io-quit) | 881 (define-key map "\C-c\C-\\" 'gdb-separate-io-quit) |
883 (define-key map "\C-c\C-d" 'gdb-inferior-io-eof) | 882 (define-key map "\C-c\C-d" 'gdb-separate-io-eof) |
884 (define-key map "\C-d" 'gdb-inferior-io-eof) | 883 (define-key map "\C-d" 'gdb-separate-io-eof) |
885 map)) | 884 map)) |
886 | 885 |
887 (define-derived-mode gdb-inferior-io-mode comint-mode "Inferior I/O" | 886 (define-derived-mode gdb-inferior-io-mode comint-mode "Inferior I/O" |
888 "Major mode for gdb inferior-io." | 887 "Major mode for gdb inferior-io." |
889 :syntax-table nil :abbrev-table nil | 888 :syntax-table nil :abbrev-table nil |
900 (with-current-buffer (process-buffer proc) | 899 (with-current-buffer (process-buffer proc) |
901 (setq proc (get-buffer-process gud-comint-buffer)) | 900 (setq proc (get-buffer-process gud-comint-buffer)) |
902 (process-send-string proc string) | 901 (process-send-string proc string) |
903 (process-send-string proc "\n"))) | 902 (process-send-string proc "\n"))) |
904 | 903 |
905 (defun gdb-inferior-io-interrupt () | 904 (defun gdb-separate-io-interrupt () |
906 "Interrupt the program being debugged." | 905 "Interrupt the program being debugged." |
907 (interactive) | 906 (interactive) |
908 (interrupt-process | 907 (interrupt-process |
909 (get-buffer-process gud-comint-buffer) comint-ptyp)) | 908 (get-buffer-process gud-comint-buffer) comint-ptyp)) |
910 | 909 |
911 (defun gdb-inferior-io-quit () | 910 (defun gdb-separate-io-quit () |
912 "Send quit signal to the program being debugged." | 911 "Send quit signal to the program being debugged." |
913 (interactive) | 912 (interactive) |
914 (quit-process | 913 (quit-process |
915 (get-buffer-process gud-comint-buffer) comint-ptyp)) | 914 (get-buffer-process gud-comint-buffer) comint-ptyp)) |
916 | 915 |
917 (defun gdb-inferior-io-stop () | 916 (defun gdb-separate-io-stop () |
918 "Stop the program being debugged." | 917 "Stop the program being debugged." |
919 (interactive) | 918 (interactive) |
920 (stop-process | 919 (stop-process |
921 (get-buffer-process gud-comint-buffer) comint-ptyp)) | 920 (get-buffer-process gud-comint-buffer) comint-ptyp)) |
922 | 921 |
923 (defun gdb-inferior-io-eof () | 922 (defun gdb-separate-io-eof () |
924 "Send end-of-file to the program being debugged." | 923 "Send end-of-file to the program being debugged." |
925 (interactive) | 924 (interactive) |
926 (process-send-eof | 925 (process-send-eof |
927 (get-buffer-process gud-comint-buffer))) | 926 (get-buffer-process gud-comint-buffer))) |
928 | 927 |
1114 (let ((sink gdb-output-sink)) | 1113 (let ((sink gdb-output-sink)) |
1115 (cond | 1114 (cond |
1116 ((eq sink 'user) | 1115 ((eq sink 'user) |
1117 (progn | 1116 (progn |
1118 (setq gud-running t) | 1117 (setq gud-running t) |
1119 (if gdb-use-inferior-io-buffer | 1118 (if gdb-use-separate-io-buffer |
1120 (setq gdb-output-sink 'inferior)))) | 1119 (setq gdb-output-sink 'inferior)))) |
1121 (t | 1120 (t |
1122 (gdb-resync) | 1121 (gdb-resync) |
1123 (error "Unexpected `starting' annotation"))))) | 1122 (error "Unexpected `starting' annotation"))))) |
1124 | 1123 |
1125 (defun gdb-stopping (ignored) | 1124 (defun gdb-stopping (ignored) |
1126 "An annotation handler for `breakpoint' and other annotations. | 1125 "An annotation handler for `breakpoint' and other annotations. |
1127 They say that I/O for the subprocess is now GDB, not the program | 1126 They say that I/O for the subprocess is now GDB, not the program |
1128 being debugged." | 1127 being debugged." |
1129 (if gdb-use-inferior-io-buffer | 1128 (if gdb-use-separate-io-buffer |
1130 (let ((sink gdb-output-sink)) | 1129 (let ((sink gdb-output-sink)) |
1131 (cond | 1130 (cond |
1132 ((eq sink 'inferior) | 1131 ((eq sink 'inferior) |
1133 (setq gdb-output-sink 'user)) | 1132 (setq gdb-output-sink 'user)) |
1134 (t | 1133 (t |
2465 (define-key menu [memory] '("Memory" . gdb-display-memory-buffer)) | 2464 (define-key menu [memory] '("Memory" . gdb-display-memory-buffer)) |
2466 (define-key menu [disassembly] | 2465 (define-key menu [disassembly] |
2467 '("Disassembly" . gdb-display-assembler-buffer)) | 2466 '("Disassembly" . gdb-display-assembler-buffer)) |
2468 (define-key menu [registers] '("Registers" . gdb-display-registers-buffer)) | 2467 (define-key menu [registers] '("Registers" . gdb-display-registers-buffer)) |
2469 (define-key menu [inferior] | 2468 (define-key menu [inferior] |
2470 '(menu-item "Inferior IO" gdb-display-inferior-io-buffer | 2469 '(menu-item "Inferior IO" gdb-display-separate-io-buffer |
2471 :enable gdb-use-inferior-io-buffer)) | 2470 :enable gdb-use-separate-io-buffer)) |
2472 (define-key menu [locals] '("Locals" . gdb-display-locals-buffer)) | 2471 (define-key menu [locals] '("Locals" . gdb-display-locals-buffer)) |
2473 (define-key menu [frames] '("Stack" . gdb-display-stack-buffer)) | 2472 (define-key menu [frames] '("Stack" . gdb-display-stack-buffer)) |
2474 (define-key menu [breakpoints] | 2473 (define-key menu [breakpoints] |
2475 '("Breakpoints" . gdb-display-breakpoints-buffer))) | 2474 '("Breakpoints" . gdb-display-breakpoints-buffer))) |
2476 | 2475 |
2482 (define-key menu [threads] '("Threads" . gdb-frame-threads-buffer)) | 2481 (define-key menu [threads] '("Threads" . gdb-frame-threads-buffer)) |
2483 (define-key menu [memory] '("Memory" . gdb-frame-memory-buffer)) | 2482 (define-key menu [memory] '("Memory" . gdb-frame-memory-buffer)) |
2484 (define-key menu [disassembly] '("Disassembiy" . gdb-frame-assembler-buffer)) | 2483 (define-key menu [disassembly] '("Disassembiy" . gdb-frame-assembler-buffer)) |
2485 (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) | 2484 (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) |
2486 (define-key menu [inferior] | 2485 (define-key menu [inferior] |
2487 '(menu-item "Inferior IO" gdb-frame-inferior-io-buffer | 2486 '(menu-item "Inferior IO" gdb-frame-separate-io-buffer |
2488 :enable gdb-use-inferior-io-buffer)) | 2487 :enable gdb-use-separate-io-buffer)) |
2489 (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer)) | 2488 (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer)) |
2490 (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer)) | 2489 (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer)) |
2491 (define-key menu [breakpoints] | 2490 (define-key menu [breakpoints] |
2492 '("Breakpoints" . gdb-frame-breakpoints-buffer))) | 2491 '("Breakpoints" . gdb-frame-breakpoints-buffer))) |
2493 | 2492 |
2494 (let ((menu (make-sparse-keymap "GDB-UI/MI"))) | 2493 (let ((menu (make-sparse-keymap "GDB-UI/MI"))) |
2495 (define-key gud-menu-map [ui] | 2494 (define-key gud-menu-map [ui] |
2496 `(menu-item (if (eq gud-minor-mode 'gdba) "GDB-UI" "GDB-MI") | 2495 `(menu-item (if (eq gud-minor-mode 'gdba) "GDB-UI" "GDB-MI") |
2497 ,menu :visible (memq gud-minor-mode '(gdbmi gdba)))) | 2496 ,menu :visible (memq gud-minor-mode '(gdbmi gdba)))) |
2498 (define-key menu [gdb-use-inferior-io] | 2497 (define-key menu [gdb-use-separate-io] |
2499 '(menu-item "Separate inferior IO" gdb-use-inferior-io-buffer | 2498 '(menu-item "Separate inferior IO" gdb-use-separate-io-buffer |
2500 :visible (eq gud-minor-mode 'gdba) | 2499 :visible (eq gud-minor-mode 'gdba) |
2501 :help "Toggle separate IO for inferior." | 2500 :help "Toggle separate IO for inferior." |
2502 :button (:toggle . gdb-use-inferior-io-buffer))) | 2501 :button (:toggle . gdb-use-separate-io-buffer))) |
2503 (define-key menu [gdb-many-windows] | 2502 (define-key menu [gdb-many-windows] |
2504 '(menu-item "Display Other Windows" gdb-many-windows | 2503 '(menu-item "Display Other Windows" gdb-many-windows |
2505 :help "Toggle display of locals, stack and breakpoint information" | 2504 :help "Toggle display of locals, stack and breakpoint information" |
2506 :button (:toggle . gdb-many-windows))) | 2505 :button (:toggle . gdb-many-windows))) |
2507 (define-key menu [gdb-restore-windows] | 2506 (define-key menu [gdb-restore-windows] |
2543 (other-window 1) | 2542 (other-window 1) |
2544 (switch-to-buffer | 2543 (switch-to-buffer |
2545 (if gud-last-last-frame | 2544 (if gud-last-last-frame |
2546 (gud-find-file (car gud-last-last-frame)) | 2545 (gud-find-file (car gud-last-last-frame)) |
2547 (gud-find-file gdb-main-file))) | 2546 (gud-find-file gdb-main-file))) |
2548 (when gdb-use-inferior-io-buffer | 2547 (when gdb-use-separate-io-buffer |
2549 (split-window-horizontally) | 2548 (split-window-horizontally) |
2550 (other-window 1) | 2549 (other-window 1) |
2551 (gdb-set-window-buffer | 2550 (gdb-set-window-buffer |
2552 (gdb-get-create-buffer 'gdb-inferior-io))) | 2551 (gdb-get-create-buffer 'gdb-inferior-io))) |
2553 (other-window 1) | 2552 (other-window 1) |
2955 (setq gdb-frame-address (match-string 1)))) | 2954 (setq gdb-frame-address (match-string 1)))) |
2956 (goto-char (point-min)) | 2955 (goto-char (point-min)) |
2957 (if (re-search-forward " source language \\(\\S-*\\)\." nil t) | 2956 (if (re-search-forward " source language \\(\\S-*\\)\." nil t) |
2958 (setq gdb-current-language (match-string 1))) | 2957 (setq gdb-current-language (match-string 1))) |
2959 (gdb-invalidate-assembler)) | 2958 (gdb-invalidate-assembler)) |
2959 | |
2960 | 2960 |
2961 | |
2962 ;; For debugging Emacs only (assumes that usual stack buffer already exists). | |
2963 (defun gdb-xbacktrace () | |
2964 "Generate a full lisp level backtrace with arguments." | |
2965 (interactive) | |
2966 (let ((frames nil) | |
2967 (frame-number gdb-frame-number)) | |
2968 (with-current-buffer (gdb-get-buffer 'gdb-stack-buffer) | |
2969 (save-excursion | |
2970 (goto-char (point-min)) | |
2971 (while (search-forward "in Ffuncall " nil t) | |
2972 (goto-char (line-beginning-position)) | |
2973 (looking-at "^#\\([0-9]+\\)") | |
2974 (push (match-string-no-properties 1) frames) | |
2975 (forward-line 1)))) | |
2976 (dolist (frame frames) | |
2977 (gdb-enqueue-input (list (concat "server frame " frame "\n") | |
2978 'ignore)) | |
2979 ; can't use separate buffer because Emacs gets confused by starting | |
2980 ; annotation from debug1_print (with output-sink eq 'emacs) | |
2981 ; (gdb-enqueue-input (list "server ppargs\n" 'gdb-get-arguments)) | |
2982 (gud-basic-call "server ppargs")) | |
2983 (gdb-enqueue-input (list (concat "server frame " frame-number "\n") | |
2984 'ignore)))) | |
2985 | |
2986 ;; Code specific to GDB 6.4 | 2961 ;; Code specific to GDB 6.4 |
2987 (defconst gdb-source-file-regexp-1 "fullname=\"\\(.*?\\)\"") | 2962 (defconst gdb-source-file-regexp-1 "fullname=\"\\(.*?\\)\"") |
2988 | 2963 |
2989 (defun gdb-set-gud-minor-mode-existing-buffers-1 () | 2964 (defun gdb-set-gud-minor-mode-existing-buffers-1 () |
2990 "Create list of source files for current GDB session." | 2965 "Create list of source files for current GDB session. |
2966 If buffers already exist for any of these files, gud-minor-mode | |
2967 is set in them." | |
2991 (goto-char (point-min)) | 2968 (goto-char (point-min)) |
2992 (while (re-search-forward gdb-source-file-regexp-1 nil t) | 2969 (while (re-search-forward gdb-source-file-regexp-1 nil t) |
2993 (push (match-string 1) gdb-source-file-list)) | 2970 (push (match-string 1) gdb-source-file-list)) |
2994 (dolist (buffer (buffer-list)) | 2971 (dolist (buffer (buffer-list)) |
2995 (with-current-buffer buffer | 2972 (with-current-buffer buffer |