diff options
| author | Nick Roberts | 2009-09-10 03:03:27 +0000 |
|---|---|---|
| committer | Nick Roberts | 2009-09-10 03:03:27 +0000 |
| commit | 72d83b260c2a63b300c6587c85183e42e6df2526 (patch) | |
| tree | 27215d7542064e69ef0ab11e72b7e6f5247d8407 | |
| parent | 9f16c5470491d4bc11cb4473895667d114fa7fd5 (diff) | |
| download | emacs-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.el | 44 | ||||
| -rw-r--r-- | lisp/progmodes/gud.el | 3 |
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 | ||