aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Roberts2003-05-12 23:47:31 +0000
committerNick Roberts2003-05-12 23:47:31 +0000
commitc453792f84a5b05d1978d25be586f89a1f2079da (patch)
tree4a458e47a9f669d608c38a4b244e88ff22509e94
parent81619b938788e399a27122690783b95f7b4aec1d (diff)
downloademacs-c453792f84a5b05d1978d25be586f89a1f2079da.tar.gz
emacs-c453792f84a5b05d1978d25be586f89a1f2079da.zip
(gdb-invalidate-assembler): Update assembler buffer
correctly when frame changes. (gdb-info-threads-custom, gdb-threads-buffer-name) (gdb-display-threads-buffer, gdb-frame-threads-buffer) (gdb-threads-mode-map, gdb-threads-mode, gdb-get-thread-number) (gdb-threads-select, gdb-threads-mouse-select): New functions and variable for a buffer that provides a selectable threads list.
-rw-r--r--lisp/gdb-ui.el89
1 files changed, 84 insertions, 5 deletions
diff --git a/lisp/gdb-ui.el b/lisp/gdb-ui.el
index 79e185fe7a5..4ebd4ad4364 100644
--- a/lisp/gdb-ui.el
+++ b/lisp/gdb-ui.el
@@ -524,7 +524,7 @@ This filter may simply queue output for a later time."
524 ("signal" gdb-stopping) 524 ("signal" gdb-stopping)
525 ("breakpoint" gdb-stopping) 525 ("breakpoint" gdb-stopping)
526 ("watchpoint" gdb-stopping) 526 ("watchpoint" gdb-stopping)
527 ("frame-begin" gdb-frame-begin) 527; ("frame-begin" gdb-frame-begin)
528 ("stopped" gdb-stopped) 528 ("stopped" gdb-stopped)
529 ("display-begin" gdb-display-begin) 529 ("display-begin" gdb-display-begin)
530 ("display-end" gdb-display-end) 530 ("display-end" gdb-display-end)
@@ -665,7 +665,8 @@ output from the current command if that happens to be appropriate."
665 (gdb-get-current-frame) 665 (gdb-get-current-frame)
666 (gdb-invalidate-registers ignored) 666 (gdb-invalidate-registers ignored)
667 (gdb-invalidate-locals ignored) 667 (gdb-invalidate-locals ignored)
668 (gdb-invalidate-display ignored))) 668 (gdb-invalidate-display ignored)
669 (gdb-invalidate-threads)))
669 (let ((sink (gdb-get-output-sink))) 670 (let ((sink (gdb-get-output-sink)))
670 (cond 671 (cond
671 ((eq sink 'user) t) 672 ((eq sink 'user) t)
@@ -1572,6 +1573,82 @@ the source buffer."
1572 (gdb-frames-select)) 1573 (gdb-frames-select))
1573 1574
1574;; 1575;;
1576;; Threads buffer. This displays a selectable thread list.
1577;;
1578(gdb-set-buffer-rules 'gdb-threads-buffer
1579 'gdb-threads-buffer-name
1580 'gdb-threads-mode)
1581
1582(def-gdb-auto-updated-buffer gdb-threads-buffer
1583 gdb-invalidate-threads
1584 "info threads\n"
1585 gdb-info-threads-handler
1586 gdb-info-threads-custom)
1587
1588(defun gdb-info-threads-custom ()
1589 (save-excursion
1590 (set-buffer (gdb-get-buffer 'gdb-threads-buffer))
1591 (let ((buffer-read-only nil))
1592 (goto-char (point-min))
1593 (while (< (point) (point-max))
1594 (put-text-property (progn (beginning-of-line) (point))
1595 (progn (end-of-line) (point))
1596 'mouse-face 'highlight)
1597 (forward-line 1)))))
1598
1599(defun gdb-threads-buffer-name ()
1600 (with-current-buffer gud-comint-buffer
1601 (concat "*threads of " (gdb-get-target-string) "*")))
1602
1603(defun gdb-display-threads-buffer ()
1604 (interactive)
1605 (gdb-display-buffer
1606 (gdb-get-create-buffer 'gdb-threads-buffer)))
1607
1608(defun gdb-frame-threads-buffer ()
1609 (interactive)
1610 (switch-to-buffer-other-frame
1611 (gdb-get-create-buffer 'gdb-threads-buffer)))
1612
1613(defvar gdb-threads-mode-map
1614 (let ((map (make-sparse-keymap)))
1615 (suppress-keymap map)
1616 (define-key map "\r" 'gdb-threads-select)
1617 (define-key map [mouse-2] 'gdb-threads-mouse-select)
1618 map))
1619
1620(defun gdb-threads-mode ()
1621 "Major mode for gdb frames.
1622
1623\\{gdb-frames-mode-map}"
1624 (setq major-mode 'gdb-threads-mode)
1625 (setq mode-name "Threads")
1626 (setq buffer-read-only t)
1627 (use-local-map gdb-threads-mode-map)
1628 (gdb-invalidate-threads))
1629
1630(defun gdb-get-thread-number ()
1631 (save-excursion
1632 (re-search-backward "^\\s-*\\([0-9]*\\)" nil t)
1633 (match-string-no-properties 1)))
1634
1635
1636(defun gdb-threads-select ()
1637 "Make the thread on the current line become the current thread and display the
1638source in the source buffer."
1639 (interactive)
1640 (gdb-enqueue-input
1641 (list (concat "thread " (gdb-get-thread-number) "\n") 'ignore))
1642 (gud-display-frame))
1643
1644(defun gdb-threads-mouse-select (event)
1645 "Make the selected frame become the current frame and display the source in
1646the source buffer."
1647 (interactive "e")
1648 (mouse-set-point event)
1649 (gdb-threads-select))
1650
1651;;
1575;; Registers buffer. 1652;; Registers buffer.
1576;; 1653;;
1577(gdb-set-buffer-rules 'gdb-registers-buffer 1654(gdb-set-buffer-rules 'gdb-registers-buffer
@@ -1900,6 +1977,7 @@ the source buffer."
1900 (define-key menu [frames] '("Stack" . gdb-display-stack-buffer)) 1977 (define-key menu [frames] '("Stack" . gdb-display-stack-buffer))
1901 (define-key menu [breakpoints] '("Breakpoints" . gdb-display-breakpoints-buffer)) 1978 (define-key menu [breakpoints] '("Breakpoints" . gdb-display-breakpoints-buffer))
1902 (define-key menu [display] '("Display" . gdb-display-display-buffer)) 1979 (define-key menu [display] '("Display" . gdb-display-display-buffer))
1980 (define-key menu [threads] '("Threads" . gdb-display-threads-buffer))
1903 (define-key menu [assembler] '("Assembler" . gdb-display-assembler-buffer))) 1981 (define-key menu [assembler] '("Assembler" . gdb-display-assembler-buffer)))
1904 1982
1905(defun gdb-frame-gdb-buffer () 1983(defun gdb-frame-gdb-buffer ()
@@ -1916,6 +1994,7 @@ the source buffer."
1916 (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer)) 1994 (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer))
1917 (define-key menu [breakpoints] '("Breakpoints" . gdb-frame-breakpoints-buffer)) 1995 (define-key menu [breakpoints] '("Breakpoints" . gdb-frame-breakpoints-buffer))
1918 (define-key menu [display] '("Display" . gdb-frame-display-buffer)) 1996 (define-key menu [display] '("Display" . gdb-frame-display-buffer))
1997 (define-key menu [threads] '("Threads" . gdb-frame-threads-buffer))
1919 (define-key menu [assembler] '("Assembler" . gdb-frame-assembler-buffer))) 1998 (define-key menu [assembler] '("Assembler" . gdb-frame-assembler-buffer)))
1920 1999
1921(defvar gdb-main-file nil "Source file from which program execution begins.") 2000(defvar gdb-main-file nil "Source file from which program execution begins.")
@@ -2246,11 +2325,11 @@ BUFFER nil or omitted means use the current buffer."
2246 (save-excursion 2325 (save-excursion
2247 (set-buffer gud-comint-buffer) 2326 (set-buffer gud-comint-buffer)
2248 (let ((queue gdb-idle-input-queue) (item)) 2327 (let ((queue gdb-idle-input-queue) (item))
2249 (while queue 2328 (dolist (item queue)
2250 (setq item (car queue)) 2329 (setq item (car queue))
2251 (if (equal (cdr item) '(gdb-assembler-handler)) 2330 (if (equal (cdr item) '(gdb-assembler-handler))
2252 (delete item gdb-idle-input-queue)) 2331 (setq gdb-idle-input-queue
2253 (setq queue (cdr queue))))) 2332 (delete item gdb-idle-input-queue))))))
2254 (gdb-enqueue-idle-input 2333 (gdb-enqueue-idle-input
2255 (list (concat "server disassemble " gdb-main-or-pc "\n") 2334 (list (concat "server disassemble " gdb-main-or-pc "\n")
2256 'gdb-assembler-handler)) 2335 'gdb-assembler-handler))