Show
Ignore:
Timestamp:
08/18/06 08:35:31 (2 years ago)
Author:
miyoshi
Message:

Sync up with Emacs CVS HEAD.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lisp/progmodes/gdb-ui.el

    r4140 r4148  
    116116(defvar gud-old-arrow nil) 
    117117(defvar gdb-overlay-arrow-position nil) 
     118(defvar gdb-stack-position nil) 
    118119(defvar gdb-server-prefix nil) 
    119120(defvar gdb-flush-pending-output nil) 
     
    322323 
    323324(defcustom gdb-use-separate-io-buffer nil 
    324   "Non-nil means display output from the inferior in a separate buffer." 
     325  "Non-nil means display output from the debugged program in a separate buffer." 
    325326  :type 'boolean 
    326327  :group 'gud 
     
    354355 
    355356(defun gdb-use-separate-io-buffer (arg) 
    356   "Toggle separate IO for inferior
     357  "Toggle separate IO for debugged program
    357358With arg, use separate IO iff arg is positive." 
    358359  (interactive "P") 
     
    361362            (not gdb-use-separate-io-buffer) 
    362363          (> (prefix-numeric-value arg) 0))) 
    363   (message (format "Separate inferior IO %sabled" 
     364  (message (format "Separate IO %sabled" 
    364365                   (if gdb-use-separate-io-buffer "en" "dis"))) 
    365366  (if (and gud-comint-buffer 
     
    384385                            (concat gdb-cpp-define-alist-program " " 
    385386                                    gdb-cpp-define-alist-flags))))) 
    386         (define-list (split-string output "\n" t)) 
    387         (name)) 
     387        (define-list (split-string output "\n" t)) (name)) 
    388388    (setq gdb-define-alist nil) 
    389389    (dolist (define define-list) 
     
    10311031 
    10321032(defun gdb-frame-separate-io-buffer () 
    1033   "Display IO of inferior in a new frame." 
     1033  "Display IO of debugged program in a new frame." 
    10341034  (interactive) 
    10351035  (if gdb-use-separate-io-buffer 
     
    12971297        (setq gud-overlay-arrow-position nil) 
    12981298        (setq gdb-overlay-arrow-position nil) 
     1299        (setq gdb-stack-position nil) 
    12991300        (if gdb-use-separate-io-buffer 
    13001301            (setq gdb-output-sink 'inferior)))) 
     
    13311332  (setq gud-overlay-arrow-position nil) 
    13321333  (setq gdb-overlay-arrow-position nil) 
     1334  (setq gdb-stack-position nil) 
    13331335  (setq gud-old-arrow nil) 
    13341336  (setq gdb-inferior-status "exited") 
     
    17771779        (while (< (point) (- (point-max) 1)) 
    17781780          (forward-line 1) 
    1779           (if (looking-at "[^\t].*?breakpoint"
     1781          (if (looking-at gdb-breakpoint-regexp
    17801782              (progn 
    1781                 (looking-at "\\([0-9]+\\)\\s-+\\S-+\\s-+\\S-+\\s-+\\(.\\)") 
    17821783                (setq bptno (match-string 1)) 
    17831784                (setq flag (char-after (match-beginning 2))) 
     
    17871788                     '(face font-lock-warning-face) 
    17881789                   '(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) 
    17921836                      (add-text-properties 
    17931837                       (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))))))) 
    18261839          (end-of-line)))))) 
    18271840  (if (gdb-get-buffer 'gdb-assembler-buffer) (gdb-assembler-custom))) 
     
    20272040            (when (looking-at "^#\\([0-9]+\\)") 
    20282041              (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)))) 
    20312050              (when (re-search-forward 
    20322051                     (concat 
     
    20992118  (setq major-mode 'gdb-frames-mode) 
    21002119  (setq mode-name "Frames") 
     2120  (setq gdb-stack-position nil) 
     2121  (add-to-list 'overlay-arrow-variable-list 'gdb-stack-position) 
    21012122  (setq buffer-read-only t) 
    21022123  (use-local-map gdb-frames-mode-map) 
     
    25502571            (gdb-make-header-line-mouse-map 
    25512572             'mouse-1 
    2552              #'(lambda () (interactive) 
    2553                 (let ((gdb-memory-address 
    2554                        ;; Let GDB do the arithmetic. 
    2555                        (concat 
    2556                         gdb-memory-address " - " 
    2557                         (number-to-string 
    2558                           (* gdb-memory-repeat-count 
    2559                              (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))))) 
    25642585           "|" 
    25652586           (propertize "+" 
     
    25692590                       'local-map (gdb-make-header-line-mouse-map 
    25702591                                   '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))))) 
    25742595           "]: " 
    25752596           (propertize gdb-memory-address 
     
    26362657(defvar gdb-locals-watch-map 
    26372658  (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))) 
    26452667    map) 
    26462668 "Keymap to create watch expression of a complex data type local variable.") 
     
    27652787  (define-key menu [threads] '("Threads" . gdb-display-threads-buffer)) 
    27662788  (define-key menu [inferior] 
    2767     '(menu-item "Inferior IO" gdb-display-separate-io-buffer 
     2789    '(menu-item "Separate IO" gdb-display-separate-io-buffer 
    27682790                :enable gdb-use-separate-io-buffer)) 
    27692791  (define-key menu [memory] '("Memory" . gdb-display-memory-buffer)) 
     
    27842806  (define-key menu [memory] '("Memory" . gdb-frame-memory-buffer)) 
    27852807  (define-key menu [inferior] 
    2786     '(menu-item "Inferior IO" gdb-frame-separate-io-buffer 
     2808    '(menu-item "Separate IO" gdb-frame-separate-io-buffer 
    27872809                :enable gdb-use-separate-io-buffer)) 
    27882810  (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) 
     
    28032825              :button (:toggle . gdb-find-source-frame))) 
    28042826  (define-key menu [gdb-use-separate-io] 
    2805   '(menu-item "Separate Inferior IO" gdb-use-separate-io-buffer 
     2827  '(menu-item "Separate IO" gdb-use-separate-io-buffer 
    28062828              :visible (eq gud-minor-mode 'gdba) 
    2807               :help "Toggle separate IO for inferior." 
     2829              :help "Toggle separate IO for debugged program." 
    28082830              :button (:toggle . gdb-use-separate-io-buffer))) 
    28092831  (define-key menu [gdb-many-windows] 
     
    29022924              (kill-local-variable 'tool-bar-map) 
    29032925              (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) 
    29072927  (setq overlay-arrow-variable-list 
    29082928        (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list)) 
    29092929  (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)) 
    29102933  (if (boundp 'speedbar-frame) (speedbar-timer-fn)) 
    29112934  (setq gud-running nil) 
     
    31293152                    (or gdb-overlay-arrow-position 
    31303153                        (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)))))) 
    31333155        ;; remove all breakpoint-icons in assembler buffer before updating. 
    31343156        (gdb-remove-breakpoint-icons (point-min) (point-max)))) 
     
    34913513(defvar gdb-locals-watch-map-1 
    34923514  (let ((map (make-sparse-keymap))) 
     3515    (suppress-keymap map) 
     3516    (define-key map "\r" 'gud-watch) 
    34933517    (define-key map [mouse-2] 'gud-watch) 
    34943518    map) 
    34953519 "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))))) 
    34963540 
    34973541;; Dont display values of arrays or structures. 
     
    35223566                          (start (window-start window)) 
    35233567                          (p (window-point window)) 
    3524                           (buffer-read-only nil)
     3568                          (buffer-read-only nil) (name) (value)
    35253569                     (erase-buffer) 
    35263570                     (dolist (local locals-list) 
    35273571                       (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)) 
    35303575                           (add-text-properties 0 (length name) 
    35313576                                `(mouse-face highlight 
    35323577                                  help-echo "mouse-2: create watch expression" 
    35333578                                  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)) 
    35353585                       (insert 
    35363586                        (concat name "\t" (nth 1 local)