aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Roberts2009-09-10 03:03:27 +0000
committerNick Roberts2009-09-10 03:03:27 +0000
commit72d83b260c2a63b300c6587c85183e42e6df2526 (patch)
tree27215d7542064e69ef0ab11e72b7e6f5247d8407
parent9f16c5470491d4bc11cb4473895667d114fa7fd5 (diff)
downloademacs-72d83b260c2a63b300c6587c85183e42e6df2526.tar.gz
emacs-72d83b260c2a63b300c6587c85183e42e6df2526.zip
Reported in thread for Bug#4375.
* progmodes/gud.el (gud-tooltip-print-command): Use MI command "-data-evaluate-expression" instead of print. * progmodes/gdb-mi.el (gdb-tooltip-print-1): Ditto. (gdb-tooltip-print): Parse output from above MI command.
-rw-r--r--lisp/progmodes/gdb-mi.el44
-rw-r--r--lisp/progmodes/gud.el3
2 files changed, 22 insertions, 25 deletions
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 781bd98f872..193587ef7aa 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -854,17 +854,13 @@ detailed description of this mode.
854(defvar tooltip-use-echo-area) 854(defvar tooltip-use-echo-area)
855 855
856(defun gdb-tooltip-print (expr) 856(defun gdb-tooltip-print (expr)
857 (tooltip-show
858 (with-current-buffer (gdb-get-buffer 'gdb-partial-output-buffer) 857 (with-current-buffer (gdb-get-buffer 'gdb-partial-output-buffer)
859 (goto-char (point-min)) 858 (goto-char (point-min))
860 (let ((string 859 (if (re-search-forward ".*value=\\(\".*\"\\)" nil t)
861 (if (search-forward "=" nil t) 860 (tooltip-show
862 (concat expr (buffer-substring (- (point) 2) (point-max))) 861 (concat expr " = " (read (match-string 1)))
863 (buffer-string)))) 862 (or gud-tooltip-echo-area tooltip-use-echo-area
864 ;; remove newline for gud-tooltip-echo-area 863 (not (display-graphic-p)))))))
865 (substring string 0 (- (length string) 1))))
866 (or gud-tooltip-echo-area tooltip-use-echo-area
867 (not (display-graphic-p)))))
868 864
869;; If expr is a macro for a function don't print because of possible dangerous 865;; If expr is a macro for a function don't print because of possible dangerous
870;; side-effects. Also printing a function within a tooltip generates an 866;; side-effects. Also printing a function within a tooltip generates an
@@ -875,7 +871,7 @@ detailed description of this mode.
875 (if (search-forward "expands to: " nil t) 871 (if (search-forward "expands to: " nil t)
876 (unless (looking-at "\\S-+.*(.*).*") 872 (unless (looking-at "\\S-+.*(.*).*")
877 (gdb-input 873 (gdb-input
878 (list (concat "print " expr) 874 (list (concat "-data-evaluate-expression " expr)
879 `(lambda () (gdb-tooltip-print ,expr)))))))) 875 `(lambda () (gdb-tooltip-print ,expr))))))))
880 876
881(defun gdb-init-buffer () 877(defun gdb-init-buffer ()
@@ -1307,7 +1303,7 @@ this trigger is subscribed to `gdb-buf-publisher' and called with
1307 (apply ',expr args)))) 1303 (apply ',expr args))))
1308 1304
1309;; Used to define all gdb-frame-*-buffer functions except 1305;; Used to define all gdb-frame-*-buffer functions except
1310;; `gdb-frame-separate-io-buffer' 1306;; `gdb-frame-io-buffer'
1311(defmacro def-gdb-frame-for-buffer (name buffer &optional doc) 1307(defmacro def-gdb-frame-for-buffer (name buffer &optional doc)
1312 "Define a function NAME which shows gdb BUFFER in a separate frame. 1308 "Define a function NAME which shows gdb BUFFER in a separate frame.
1313 1309
@@ -1401,7 +1397,7 @@ DOC is an optional documentation string."
1401 (gdb-get-target-string) 1397 (gdb-get-target-string)
1402 "*")) 1398 "*"))
1403 1399
1404(defun gdb-display-separate-io-buffer () 1400(defun gdb-display-io-buffer ()
1405 "Display IO of debugged program in a separate window." 1401 "Display IO of debugged program in a separate window."
1406 (interactive) 1402 (interactive)
1407 (gdb-display-buffer 1403 (gdb-display-buffer
@@ -1414,7 +1410,7 @@ DOC is an optional documentation string."
1414 (menu-bar-lines . nil) 1410 (menu-bar-lines . nil)
1415 (minibuffer . nil))) 1411 (minibuffer . nil)))
1416 1412
1417(defun gdb-frame-separate-io-buffer () 1413(defun gdb-frame-io-buffer ()
1418 "Display IO of debugged program in a new frame." 1414 "Display IO of debugged program in a new frame."
1419 (interactive) 1415 (interactive)
1420 (let ((special-display-regexps (append special-display-regexps '(".*"))) 1416 (let ((special-display-regexps (append special-display-regexps '(".*")))
@@ -1423,11 +1419,11 @@ DOC is an optional documentation string."
1423 1419
1424(defvar gdb-inferior-io-mode-map 1420(defvar gdb-inferior-io-mode-map
1425 (let ((map (make-sparse-keymap))) 1421 (let ((map (make-sparse-keymap)))
1426 (define-key map "\C-c\C-c" 'gdb-separate-io-interrupt) 1422 (define-key map "\C-c\C-c" 'gdb-io-interrupt)
1427 (define-key map "\C-c\C-z" 'gdb-separate-io-stop) 1423 (define-key map "\C-c\C-z" 'gdb-io-stop)
1428 (define-key map "\C-c\C-\\" 'gdb-separate-io-quit) 1424 (define-key map "\C-c\C-\\" 'gdb-io-quit)
1429 (define-key map "\C-c\C-d" 'gdb-separate-io-eof) 1425 (define-key map "\C-c\C-d" 'gdb-io-eof)
1430 (define-key map "\C-d" 'gdb-separate-io-eof) 1426 (define-key map "\C-d" 'gdb-io-eof)
1431 map)) 1427 map))
1432 1428
1433;; We want to use comint because it has various nifty and familiar features. 1429;; We want to use comint because it has various nifty and familiar features.
@@ -1447,25 +1443,25 @@ The following commands are available:
1447 (with-current-buffer (gdb-get-buffer-create 'gdb-inferior-io) 1443 (with-current-buffer (gdb-get-buffer-create 'gdb-inferior-io)
1448 (comint-output-filter proc string))) 1444 (comint-output-filter proc string)))
1449 1445
1450(defun gdb-separate-io-interrupt () 1446(defun gdb-io-interrupt ()
1451 "Interrupt the program being debugged." 1447 "Interrupt the program being debugged."
1452 (interactive) 1448 (interactive)
1453 (interrupt-process 1449 (interrupt-process
1454 (get-buffer-process gud-comint-buffer) comint-ptyp)) 1450 (get-buffer-process gud-comint-buffer) comint-ptyp))
1455 1451
1456(defun gdb-separate-io-quit () 1452(defun gdb-io-quit ()
1457 "Send quit signal to the program being debugged." 1453 "Send quit signal to the program being debugged."
1458 (interactive) 1454 (interactive)
1459 (quit-process 1455 (quit-process
1460 (get-buffer-process gud-comint-buffer) comint-ptyp)) 1456 (get-buffer-process gud-comint-buffer) comint-ptyp))
1461 1457
1462(defun gdb-separate-io-stop () 1458(defun gdb-io-stop ()
1463 "Stop the program being debugged." 1459 "Stop the program being debugged."
1464 (interactive) 1460 (interactive)
1465 (stop-process 1461 (stop-process
1466 (get-buffer-process gud-comint-buffer) comint-ptyp)) 1462 (get-buffer-process gud-comint-buffer) comint-ptyp))
1467 1463
1468(defun gdb-separate-io-eof () 1464(defun gdb-io-eof ()
1469 "Send end-of-file to the program being debugged." 1465 "Send end-of-file to the program being debugged."
1470 (interactive) 1466 (interactive)
1471 (process-send-eof 1467 (process-send-eof
@@ -3820,7 +3816,7 @@ SPLIT-HORIZONTAL and show BUF in the new window."
3820 '("Disassembly" . gdb-display-disassembly-buffer)) 3816 '("Disassembly" . gdb-display-disassembly-buffer))
3821 (define-key menu [registers] '("Registers" . gdb-display-registers-buffer)) 3817 (define-key menu [registers] '("Registers" . gdb-display-registers-buffer))
3822 (define-key menu [inferior] 3818 (define-key menu [inferior]
3823 '("Separate IO" . gdb-display-separate-io-buffer)) 3819 '("IO" . gdb-display-io-buffer))
3824 (define-key menu [locals] '("Locals" . gdb-display-locals-buffer)) 3820 (define-key menu [locals] '("Locals" . gdb-display-locals-buffer))
3825 (define-key menu [frames] '("Stack" . gdb-display-stack-buffer)) 3821 (define-key menu [frames] '("Stack" . gdb-display-stack-buffer))
3826 (define-key menu [breakpoints] 3822 (define-key menu [breakpoints]
@@ -3836,7 +3832,7 @@ SPLIT-HORIZONTAL and show BUF in the new window."
3836 (define-key menu [disassembly] '("Disassembly" . gdb-frame-disassembly-buffer)) 3832 (define-key menu [disassembly] '("Disassembly" . gdb-frame-disassembly-buffer))
3837 (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) 3833 (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer))
3838 (define-key menu [inferior] 3834 (define-key menu [inferior]
3839 '("Separate IO" . gdb-frame-separate-io-buffer)) 3835 '("IO" . gdb-frame-io-buffer))
3840 (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer)) 3836 (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer))
3841 (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer)) 3837 (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer))
3842 (define-key menu [breakpoints] 3838 (define-key menu [breakpoints]
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 0d3679575d6..34d7cd7eaef 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -3411,7 +3411,8 @@ With arg, dereference expr if ARG is positive, otherwise do not derereference."
3411(defun gud-tooltip-print-command (expr) 3411(defun gud-tooltip-print-command (expr)
3412 "Return a suitable command to print the expression EXPR." 3412 "Return a suitable command to print the expression EXPR."
3413 (case gud-minor-mode 3413 (case gud-minor-mode
3414 ((dbx gdbmi) (concat "print " expr)) 3414 (gdbmi (concat "-data-evaluate-expression " expr))
3415 (dbx (concat "print " expr))
3415 ((xdb pdb) (concat "p " expr)) 3416 ((xdb pdb) (concat "p " expr))
3416 (sdb (concat expr "/")))) 3417 (sdb (concat expr "/"))))
3417 3418