Changeset 4148 for trunk/lisp/progmodes/gdb-ui.el
- Timestamp:
- 08/18/06 08:35:31 (2 years ago)
- Files:
-
- trunk/lisp/progmodes/gdb-ui.el (modified) (22 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lisp/progmodes/gdb-ui.el
r4140 r4148 116 116 (defvar gud-old-arrow nil) 117 117 (defvar gdb-overlay-arrow-position nil) 118 (defvar gdb-stack-position nil) 118 119 (defvar gdb-server-prefix nil) 119 120 (defvar gdb-flush-pending-output nil) … … 322 323 323 324 (defcustom gdb-use-separate-io-buffer nil 324 "Non-nil means display output from the inferiorin a separate buffer."325 "Non-nil means display output from the debugged program in a separate buffer." 325 326 :type 'boolean 326 327 :group 'gud … … 354 355 355 356 (defun gdb-use-separate-io-buffer (arg) 356 "Toggle separate IO for inferior.357 "Toggle separate IO for debugged program. 357 358 With arg, use separate IO iff arg is positive." 358 359 (interactive "P") … … 361 362 (not gdb-use-separate-io-buffer) 362 363 (> (prefix-numeric-value arg) 0))) 363 (message (format "Separate inferiorIO %sabled"364 (message (format "Separate IO %sabled" 364 365 (if gdb-use-separate-io-buffer "en" "dis"))) 365 366 (if (and gud-comint-buffer … … 384 385 (concat gdb-cpp-define-alist-program " " 385 386 gdb-cpp-define-alist-flags))))) 386 (define-list (split-string output "\n" t)) 387 (name)) 387 (define-list (split-string output "\n" t)) (name)) 388 388 (setq gdb-define-alist nil) 389 389 (dolist (define define-list) … … 1031 1031 1032 1032 (defun gdb-frame-separate-io-buffer () 1033 "Display IO of inferiorin a new frame."1033 "Display IO of debugged program in a new frame." 1034 1034 (interactive) 1035 1035 (if gdb-use-separate-io-buffer … … 1297 1297 (setq gud-overlay-arrow-position nil) 1298 1298 (setq gdb-overlay-arrow-position nil) 1299 (setq gdb-stack-position nil) 1299 1300 (if gdb-use-separate-io-buffer 1300 1301 (setq gdb-output-sink 'inferior)))) … … 1331 1332 (setq gud-overlay-arrow-position nil) 1332 1333 (setq gdb-overlay-arrow-position nil) 1334 (setq gdb-stack-position nil) 1333 1335 (setq gud-old-arrow nil) 1334 1336 (setq gdb-inferior-status "exited") … … 1777 1779 (while (< (point) (- (point-max) 1)) 1778 1780 (forward-line 1) 1779 (if (looking-at "[^\t].*?breakpoint")1781 (if (looking-at gdb-breakpoint-regexp) 1780 1782 (progn 1781 (looking-at "\\([0-9]+\\)\\s-+\\S-+\\s-+\\S-+\\s-+\\(.\\)")1782 1783 (setq bptno (match-string 1)) 1783 1784 (setq flag (char-after (match-beginning 2))) … … 1787 1788 '(face font-lock-warning-face) 1788 1789 '(face font-lock-type-face))) 1789 (beginning-of-line) 1790 (if (re-search-forward " in \\(.*\\) at\\s-+" nil t) 1791 (progn 1790 (let ((bl (point)) 1791 (el (line-end-position))) 1792 (if (re-search-forward " in \\(.*\\) at\\s-+" el t) 1793 (progn 1794 (add-text-properties 1795 (match-beginning 1) (match-end 1) 1796 '(face font-lock-function-name-face)) 1797 (looking-at "\\(\\S-+\\):\\([0-9]+\\)") 1798 (let ((line (match-string 2)) 1799 (file (match-string 1))) 1800 (add-text-properties bl el 1801 '(mouse-face highlight 1802 help-echo "mouse-2, RET: visit breakpoint")) 1803 (unless (file-exists-p file) 1804 (setq file (cdr (assoc bptno gdb-location-alist)))) 1805 (if (and file 1806 (not (string-equal file "File not found"))) 1807 (with-current-buffer 1808 (find-file-noselect file 'nowarn) 1809 (set (make-local-variable 'gud-minor-mode) 1810 'gdba) 1811 (set (make-local-variable 'tool-bar-map) 1812 gud-tool-bar-map) 1813 ;; Only want one breakpoint icon at each 1814 ;; location. 1815 (save-excursion 1816 (goto-line (string-to-number line)) 1817 (gdb-put-breakpoint-icon (eq flag ?y) bptno))) 1818 (gdb-enqueue-input 1819 (list 1820 (concat gdb-server-prefix "list " 1821 (match-string-no-properties 1) ":1\n") 1822 'ignore)) 1823 (gdb-enqueue-input 1824 (list (concat gdb-server-prefix "info source\n") 1825 `(lambda () (gdb-get-location 1826 ,bptno ,line ,flag))))))) 1827 (if (re-search-forward 1828 "<\\(\\(\\sw\\|[_.]\\)+\\)\\(\\+[0-9]+\\)?>" 1829 el t) 1830 (add-text-properties 1831 (match-beginning 1) (match-end 1) 1832 '(face font-lock-function-name-face)) 1833 (end-of-line) 1834 (re-search-backward "\\s-\\(\\S-*\\)" 1835 bl t) 1792 1836 (add-text-properties 1793 1837 (match-beginning 1) (match-end 1) 1794 '(face font-lock-function-name-face)) 1795 (looking-at "\\(\\S-+\\):\\([0-9]+\\)") 1796 (let ((line (match-string 2)) 1797 (file (match-string 1))) 1798 (add-text-properties (line-beginning-position) 1799 (line-end-position) 1800 '(mouse-face highlight 1801 help-echo "mouse-2, RET: visit breakpoint")) 1802 (unless (file-exists-p file) 1803 (setq file (cdr (assoc bptno gdb-location-alist)))) 1804 (if (and file 1805 (not (string-equal file "File not found"))) 1806 (with-current-buffer 1807 (find-file-noselect file 'nowarn) 1808 (set (make-local-variable 'gud-minor-mode) 1809 'gdba) 1810 (set (make-local-variable 'tool-bar-map) 1811 gud-tool-bar-map) 1812 ;; Only want one breakpoint icon at each 1813 ;; location. 1814 (save-excursion 1815 (goto-line (string-to-number line)) 1816 (gdb-put-breakpoint-icon (eq flag ?y) bptno))) 1817 (gdb-enqueue-input 1818 (list 1819 (concat gdb-server-prefix "list " 1820 (match-string-no-properties 1) ":1\n") 1821 'ignore)) 1822 (gdb-enqueue-input 1823 (list (concat gdb-server-prefix "info source\n") 1824 `(lambda () (gdb-get-location 1825 ,bptno ,line ,flag)))))))))) 1838 '(face font-lock-variable-name-face))))))) 1826 1839 (end-of-line)))))) 1827 1840 (if (gdb-get-buffer 'gdb-assembler-buffer) (gdb-assembler-custom))) … … 2027 2040 (when (looking-at "^#\\([0-9]+\\)") 2028 2041 (when (string-equal (match-string 1) gdb-frame-number) 2029 (put-text-property bl (+ bl 4) 2030 'face '(:inverse-video t))) 2042 (if (> (car (window-fringes)) 0) 2043 (progn 2044 (or gdb-stack-position 2045 (setq gdb-stack-position (make-marker))) 2046 (set-marker gdb-stack-position (point))) 2047 (set-marker gdb-stack-position nil) 2048 (put-text-property bl (+ bl 4) 2049 'face '(:inverse-video t)))) 2031 2050 (when (re-search-forward 2032 2051 (concat … … 2099 2118 (setq major-mode 'gdb-frames-mode) 2100 2119 (setq mode-name "Frames") 2120 (setq gdb-stack-position nil) 2121 (add-to-list 'overlay-arrow-variable-list 'gdb-stack-position) 2101 2122 (setq buffer-read-only t) 2102 2123 (use-local-map gdb-frames-mode-map) … … 2550 2571 (gdb-make-header-line-mouse-map 2551 2572 'mouse-1 2552 #'(lambda () (interactive)2553 (let ((gdb-memory-address2554 ;; Let GDB do the arithmetic.2555 (concat2556 gdb-memory-address " - "2557 (number-to-string2558 (* gdb-memory-repeat-count2559 (cond ((string= gdb-memory-unit "b") 1)2560 ((string= gdb-memory-unit "h") 2)2561 ((string= gdb-memory-unit "w") 4)2562 ((string= gdb-memory-unit "g") 8)))))))2563 (gdb-invalidate-memory)))))2573 (lambda () (interactive) 2574 (let ((gdb-memory-address 2575 ;; Let GDB do the arithmetic. 2576 (concat 2577 gdb-memory-address " - " 2578 (number-to-string 2579 (* gdb-memory-repeat-count 2580 (cond ((string= gdb-memory-unit "b") 1) 2581 ((string= gdb-memory-unit "h") 2) 2582 ((string= gdb-memory-unit "w") 4) 2583 ((string= gdb-memory-unit "g") 8))))))) 2584 (gdb-invalidate-memory))))) 2564 2585 "|" 2565 2586 (propertize "+" … … 2569 2590 'local-map (gdb-make-header-line-mouse-map 2570 2591 'mouse-1 2571 #'(lambda () (interactive)2572 (let ((gdb-memory-address nil))2573 (gdb-invalidate-memory)))))2592 (lambda () (interactive) 2593 (let ((gdb-memory-address nil)) 2594 (gdb-invalidate-memory))))) 2574 2595 "]: " 2575 2596 (propertize gdb-memory-address … … 2636 2657 (defvar gdb-locals-watch-map 2637 2658 (let ((map (make-sparse-keymap))) 2638 (define-key map "\r" '(lambda () (interactive) 2639 (beginning-of-line) 2640 (gud-watch))) 2641 (define-key map [mouse-2] '(lambda (event) (interactive "e") 2642 (mouse-set-point event) 2643 (beginning-of-line) 2644 (gud-watch))) 2659 (suppress-keymap map) 2660 (define-key map "\r" (lambda () (interactive) 2661 (beginning-of-line) 2662 (gud-watch))) 2663 (define-key map [mouse-2] (lambda (event) (interactive "e") 2664 (mouse-set-point event) 2665 (beginning-of-line) 2666 (gud-watch))) 2645 2667 map) 2646 2668 "Keymap to create watch expression of a complex data type local variable.") … … 2765 2787 (define-key menu [threads] '("Threads" . gdb-display-threads-buffer)) 2766 2788 (define-key menu [inferior] 2767 '(menu-item " InferiorIO" gdb-display-separate-io-buffer2789 '(menu-item "Separate IO" gdb-display-separate-io-buffer 2768 2790 :enable gdb-use-separate-io-buffer)) 2769 2791 (define-key menu [memory] '("Memory" . gdb-display-memory-buffer)) … … 2784 2806 (define-key menu [memory] '("Memory" . gdb-frame-memory-buffer)) 2785 2807 (define-key menu [inferior] 2786 '(menu-item " InferiorIO" gdb-frame-separate-io-buffer2808 '(menu-item "Separate IO" gdb-frame-separate-io-buffer 2787 2809 :enable gdb-use-separate-io-buffer)) 2788 2810 (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) … … 2803 2825 :button (:toggle . gdb-find-source-frame))) 2804 2826 (define-key menu [gdb-use-separate-io] 2805 '(menu-item "Separate I nferior IO" gdb-use-separate-io-buffer2827 '(menu-item "Separate IO" gdb-use-separate-io-buffer 2806 2828 :visible (eq gud-minor-mode 'gdba) 2807 :help "Toggle separate IO for inferior."2829 :help "Toggle separate IO for debugged program." 2808 2830 :button (:toggle . gdb-use-separate-io-buffer))) 2809 2831 (define-key menu [gdb-many-windows] … … 2902 2924 (kill-local-variable 'tool-bar-map) 2903 2925 (kill-local-variable 'gdb-define-alist)))))) 2904 (when (markerp gdb-overlay-arrow-position) 2905 (move-marker gdb-overlay-arrow-position nil) 2906 (setq gdb-overlay-arrow-position nil)) 2926 (setq gdb-overlay-arrow-position nil) 2907 2927 (setq overlay-arrow-variable-list 2908 2928 (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list)) 2909 2929 (setq fringe-indicator-alist '((overlay-arrow . right-triangle))) 2930 (setq gdb-stack-position nil) 2931 (setq overlay-arrow-variable-list 2932 (delq 'gdb-stack-position overlay-arrow-variable-list)) 2910 2933 (if (boundp 'speedbar-frame) (speedbar-timer-fn)) 2911 2934 (setq gud-running nil) … … 3129 3152 (or gdb-overlay-arrow-position 3130 3153 (setq gdb-overlay-arrow-position (make-marker))) 3131 (set-marker gdb-overlay-arrow-position 3132 (point) (current-buffer)))))) 3154 (set-marker gdb-overlay-arrow-position (point)))))) 3133 3155 ;; remove all breakpoint-icons in assembler buffer before updating. 3134 3156 (gdb-remove-breakpoint-icons (point-min) (point-max)))) … … 3491 3513 (defvar gdb-locals-watch-map-1 3492 3514 (let ((map (make-sparse-keymap))) 3515 (suppress-keymap map) 3516 (define-key map "\r" 'gud-watch) 3493 3517 (define-key map [mouse-2] 'gud-watch) 3494 3518 map) 3495 3519 "Keymap to create watch expression of a complex data type local variable.") 3520 3521 (defvar gdb-edit-locals-map-1 3522 (let ((map (make-sparse-keymap))) 3523 (suppress-keymap map) 3524 (define-key map "\r" 'gdb-edit-locals-value) 3525 (define-key map [mouse-2] 'gdb-edit-locals-value) 3526 map) 3527 "Keymap to edit value of a simple data type local variable.") 3528 3529 (defun gdb-edit-locals-value (&optional event) 3530 "Assign a value to a variable displayed in the locals buffer." 3531 (interactive (list last-input-event)) 3532 (save-excursion 3533 (if event (posn-set-point (event-end event))) 3534 (beginning-of-line) 3535 (let* ((var (current-word)) 3536 (value (read-string (format "New value (%s): " var)))) 3537 (gdb-enqueue-input 3538 (list (concat gdb-server-prefix"set variable " var " = " value "\n") 3539 'ignore))))) 3496 3540 3497 3541 ;; Dont display values of arrays or structures. … … 3522 3566 (start (window-start window)) 3523 3567 (p (window-point window)) 3524 (buffer-read-only nil) )3568 (buffer-read-only nil) (name) (value)) 3525 3569 (erase-buffer) 3526 3570 (dolist (local locals-list) 3527 3571 (setq name (car local)) 3528 (if (or (not (nth 2 local)) 3529 (string-match "^\\0x" (nth 2 local))) 3572 (setq value (nth 2 local)) 3573 (if (or (not value) 3574 (string-match "^\\0x" value)) 3530 3575 (add-text-properties 0 (length name) 3531 3576 `(mouse-face highlight 3532 3577 help-echo "mouse-2: create watch expression" 3533 3578 local-map ,gdb-locals-watch-map-1) 3534 name)) 3579 name) 3580 (add-text-properties 0 (length value) 3581 `(mouse-face highlight 3582 help-echo "mouse-2: edit value" 3583 local-map ,gdb-edit-locals-map-1) 3584 value)) 3535 3585 (insert 3536 3586 (concat name "\t" (nth 1 local)
