43 |
;; |
;; |
44 |
;; Known Bugs: |
;; Known Bugs: |
45 |
;; Does not auto-display arrays of structures or structures containing arrays. |
;; Does not auto-display arrays of structures or structures containing arrays. |
46 |
;; On MS Windows, GDB from MINGW does not flush the output from the inferior. |
;; On MS Windows, Gdb 5.1.1 from MinGW 2.0 does not flush the output from the |
47 |
|
;; inferior. |
48 |
|
|
49 |
;;; Code: |
;;; Code: |
50 |
|
|
171 |
(gdb-clear-inferior-io) |
(gdb-clear-inferior-io) |
172 |
;; |
;; |
173 |
(if (eq window-system 'w32) |
(if (eq window-system 'w32) |
174 |
(gdb-enqueue-input (list "set set new-console off\n" 'ignore))) |
(gdb-enqueue-input (list "set new-console off\n" 'ignore))) |
175 |
(gdb-enqueue-input (list "set height 0\n" 'ignore)) |
(gdb-enqueue-input (list "set height 0\n" 'ignore)) |
176 |
;; find source file and compilation directory here |
;; find source file and compilation directory here |
177 |
(gdb-enqueue-input (list "server list\n" 'ignore)) |
(gdb-enqueue-input (list "server list\n" 'ignore)) |
518 |
;; any newlines. |
;; any newlines. |
519 |
;; |
;; |
520 |
|
|
521 |
(defcustom gud-gdba-command-name "gdb -annotate=2" |
(defcustom gud-gdba-command-name |
522 |
|
(if (eq window-system 'w32) |
523 |
|
"gdb -annotate=2 -noasync" |
524 |
|
"gdb -annotate=2") |
525 |
"Default command to execute an executable under the GDB-UI debugger." |
"Default command to execute an executable under the GDB-UI debugger." |
526 |
:type 'string |
:type 'string |
527 |
:group 'gud) |
:group 'gud) |
789 |
(let ((start (progn (point))) |
(let ((start (progn (point))) |
790 |
(end (progn (end-of-line) (point)))) |
(end (progn (end-of-line) (point)))) |
791 |
(with-current-buffer gdb-expression-buffer-name |
(with-current-buffer gdb-expression-buffer-name |
792 |
(setq buffer-read-only nil) |
(let ((buffer-read-only nil)) |
793 |
(delete-region (point-min) (point-max)) |
(delete-region (point-min) (point-max)) |
794 |
(insert-buffer-substring (gdb-get-buffer |
(insert-buffer-substring (gdb-get-buffer |
795 |
'gdb-partial-output-buffer) |
'gdb-partial-output-buffer) |
796 |
start end) |
start end) |
797 |
(insert "\n"))) |
(insert "\n")))) |
798 |
(goto-char (point-min)) |
(goto-char (point-min)) |
799 |
(re-search-forward "##" nil t) |
(re-search-forward "##" nil t) |
800 |
(setq gdb-nesting-level 0) |
(setq gdb-nesting-level 0) |
1482 |
file |
file |
1483 |
(expand-file-name file gdb-cdir)))) |
(expand-file-name file gdb-cdir)))) |
1484 |
(goto-line (string-to-number line)))))) |
(goto-line (string-to-number line)))))) |
1485 |
|
;; I'll get this to work one day! |
1486 |
|
;; (defun gdb-goto-breakpoint () |
1487 |
|
;; "Display the file in the source buffer at the breakpoint specified on the |
1488 |
|
;; current line." |
1489 |
|
;; (interactive) |
1490 |
|
;; (save-excursion |
1491 |
|
;; (let ((eol (progn (end-of-line) (point)))) |
1492 |
|
;; (beginning-of-line 1) |
1493 |
|
;; (if (re-search-forward "\\(\\S-*\\):\\([0-9]+\\)" eol t) |
1494 |
|
;; (let ((line (match-string 2)) |
1495 |
|
;; (file (match-string 1))) |
1496 |
|
;; (save-selected-window |
1497 |
|
;; (select-window gdb-source-window) |
1498 |
|
;; (switch-to-buffer (find-file-noselect |
1499 |
|
;; (if (file-exists-p file) |
1500 |
|
;; file |
1501 |
|
;; (expand-file-name file gdb-cdir)))) |
1502 |
|
;; (goto-line (string-to-number line)))))) |
1503 |
|
;; (let ((eol (progn (end-of-line) (point)))) |
1504 |
|
;; (beginning-of-line 1) |
1505 |
|
;; (if (re-search-forward "<\\(\\S-*?\\)\\(\\+*[0-9]*\\)>" eol t) |
1506 |
|
;; (save-selected-window |
1507 |
|
;; (select-window gdb-source-window) |
1508 |
|
;; (gdb-get-create-buffer 'gdb-assembler-buffer) |
1509 |
|
;; (gdb-enqueue-input |
1510 |
|
;; (list (concat "server disassemble " (match-string 1) "\n") |
1511 |
|
;; 'gdb-assembler-handler)) |
1512 |
|
;; (with-current-buffer (gdb-get-buffer 'gdb-assembler-buffer) |
1513 |
|
;; (re-search-forward |
1514 |
|
;; (concat (match-string 1) (match-string 2))))))))) |
1515 |
|
|
1516 |
(defun gdb-mouse-goto-breakpoint (event) |
(defun gdb-mouse-goto-breakpoint (event) |
1517 |
"Display the file in the source buffer at the selected breakpoint." |
"Display the file in the source buffer at the selected breakpoint." |
1993 |
|
|
1994 |
;;; Shared keymap initialization: |
;;; Shared keymap initialization: |
1995 |
|
|
1996 |
(defun gdb-display-gdb-buffer () |
(let ((menu (make-sparse-keymap "GDB-Frames"))) |
1997 |
(interactive) |
(define-key gud-menu-map [frames] |
1998 |
(gdb-display-buffer |
`(menu-item "GDB-Frames" ,menu :visible (eq gud-minor-mode 'gdba))) |
1999 |
(gdb-get-create-buffer 'gdba))) |
(define-key menu [gdb] '("Gdb" . gdb-frame-gdb-buffer)) |
2000 |
|
(define-key menu [locals] '("Locals" . gdb-frame-locals-buffer)) |
2001 |
|
(define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) |
2002 |
|
(define-key menu [frames] '("Stack" . gdb-frame-stack-buffer)) |
2003 |
|
(define-key menu [breakpoints] '("Breakpoints" . gdb-frame-breakpoints-buffer)) |
2004 |
|
(define-key menu [display] '("Display" . gdb-frame-display-buffer)) |
2005 |
|
(define-key menu [threads] '("Threads" . gdb-frame-threads-buffer)) |
2006 |
|
; (define-key menu [assembler] '("Assembler" . gdb-frame-assembler-buffer)) |
2007 |
|
) |
2008 |
|
|
2009 |
(let ((menu (make-sparse-keymap "GDB-Windows"))) |
(let ((menu (make-sparse-keymap "GDB-Windows"))) |
2010 |
(define-key gud-menu-map [displays] |
(define-key gud-menu-map [displays] |
2016 |
(define-key menu [breakpoints] '("Breakpoints" . gdb-display-breakpoints-buffer)) |
(define-key menu [breakpoints] '("Breakpoints" . gdb-display-breakpoints-buffer)) |
2017 |
(define-key menu [display] '("Display" . gdb-display-display-buffer)) |
(define-key menu [display] '("Display" . gdb-display-display-buffer)) |
2018 |
(define-key menu [threads] '("Threads" . gdb-display-threads-buffer)) |
(define-key menu [threads] '("Threads" . gdb-display-threads-buffer)) |
2019 |
(define-key menu [assembler] '("Assembler" . gdb-display-assembler-buffer))) |
; (define-key menu [assembler] '("Assembler" . gdb-display-assembler-buffer)) |
2020 |
|
) |
2021 |
|
|
2022 |
|
(let ((menu (make-sparse-keymap "View"))) |
2023 |
|
(define-key gud-menu-map [view] `(menu-item "View" ,menu)) |
2024 |
|
; (define-key menu [both] '(menu-item "Both" gdb-view-both |
2025 |
|
; :help "Display both source and assembler" |
2026 |
|
; :button (:radio . (eq gdb-selected-view 'both)))) |
2027 |
|
(define-key menu [assembler] '(menu-item "Assembler" gdb-view-assembler |
2028 |
|
:help "Display assembler only" |
2029 |
|
:button (:radio . (eq gdb-selected-view 'assembler)))) |
2030 |
|
(define-key menu [source] '(menu-item "Source" gdb-view-source |
2031 |
|
:help "Display source only" |
2032 |
|
:button (:radio . (eq gdb-selected-view 'source))))) |
2033 |
|
|
2034 |
(defun gdb-frame-gdb-buffer () |
(defun gdb-frame-gdb-buffer () |
2035 |
(interactive) |
(interactive) |
2036 |
(switch-to-buffer-other-frame |
(switch-to-buffer-other-frame |
2037 |
(gdb-get-create-buffer 'gdba))) |
(gdb-get-create-buffer 'gdba))) |
2038 |
|
|
2039 |
(let ((menu (make-sparse-keymap "GDB-Frames")) |
(defun gdb-display-gdb-buffer () |
2040 |
(submenu (make-sparse-keymap "View"))) |
(interactive) |
2041 |
(define-key gud-menu-map [frames] |
(gdb-display-buffer |
2042 |
`(menu-item "GDB-Frames" ,menu :visible (eq gud-minor-mode 'gdba))) |
(gdb-get-create-buffer 'gdba))) |
|
(define-key menu [gdb] '("Gdb" . gdb-frame-gdb-buffer)) |
|
|
(define-key menu [locals] '("Locals" . gdb-frame-locals-buffer)) |
|
|
(define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) |
|
|
(define-key menu [frames] '("Stack" . gdb-frame-stack-buffer)) |
|
|
(define-key menu [breakpoints] '("Breakpoints" . gdb-frame-breakpoints-buffer)) |
|
|
(define-key menu [display] '("Display" . gdb-frame-display-buffer)) |
|
|
(define-key menu [threads] '("Threads" . gdb-frame-threads-buffer)) |
|
|
(define-key menu [view] `(menu-item "View" ,submenu)) |
|
|
(define-key submenu [source] |
|
|
'(menu-item "Source" gdb-view-source |
|
|
:help "Display source only" |
|
|
:button (:radio . (eq gdb-selected-view 'source)))) |
|
|
(define-key submenu [assembler] |
|
|
'(menu-item "Assembler" gdb-view-assembler |
|
|
:help "Display assembler only" |
|
|
:button (:radio . (eq gdb-selected-view 'assembler)))) |
|
|
; (define-key submenu [both] |
|
|
; '(menu-item "Both" gdb-view-both |
|
|
; :help "Display both source and assembler" |
|
|
; :button (:radio . (eq gdb-selected-view 'both)))) |
|
|
) |
|
2043 |
|
|
2044 |
(defun gdb-view-source() |
(defun gdb-view-source() |
2045 |
(interactive) |
(interactive) |