diff options
| author | Nick Roberts | 2006-02-17 00:25:16 +0000 |
|---|---|---|
| committer | Nick Roberts | 2006-02-17 00:25:16 +0000 |
| commit | b32d1b9b0198a6e74906eb520e8d65ec836e2fec (patch) | |
| tree | 1223f53d28e32f25f071aa0c3748da1560c70bf9 | |
| parent | cf5a5c38c6d1263cbdcf4561b25f5e6988f4c419 (diff) | |
| download | emacs-b32d1b9b0198a6e74906eb520e8d65ec836e2fec.tar.gz emacs-b32d1b9b0198a6e74906eb520e8d65ec836e2fec.zip | |
(gdba, gdb-var-list): Improve doc strings.
(menu): Re-order menu items.
(gdb-var-update-regexp, gdb-var-update-regexp-1): Match "in_scope" field.
(gdb-var-update-handler-1): Use it for GDB 6.4+.
(gdb-post-prompt): Speed things by not forcing update.
| -rw-r--r-- | lisp/progmodes/gdb-ui.el | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el index 588583e9f51..2e7fa41d622 100644 --- a/lisp/progmodes/gdb-ui.el +++ b/lisp/progmodes/gdb-ui.el | |||
| @@ -72,8 +72,16 @@ | |||
| 72 | 72 | ||
| 73 | ;; 1) Strings that are watched don't update in the speedbar when their | 73 | ;; 1) Strings that are watched don't update in the speedbar when their |
| 74 | ;; contents change. | 74 | ;; contents change. |
| 75 | ;; 2) Watch expressions go out of scope when the inferior is re-run. | 75 | ;; 2) Cannot handle multiple debug sessions. |
| 76 | ;; 3) Cannot handle multiple debug sessions. | 76 | |
| 77 | ;;; Problems with watch expressions: | ||
| 78 | |||
| 79 | ;; 1) They go out of scope when the inferior is re-run. | ||
| 80 | ;; 2) -var-update reports that an out of scope variable has changed: | ||
| 81 | ;; changelist=[{name="var1",in_scope="false"}], but the value can't be accessed. | ||
| 82 | ;; (-var-list-children, in contrast allows you to create variable objects of | ||
| 83 | ;; the children when they are out of scope and get their values). | ||
| 84 | ;; 3) VARNUM increments even when vaiable object is not created (maybe trivial). | ||
| 77 | 85 | ||
| 78 | ;;; TODO: | 86 | ;;; TODO: |
| 79 | 87 | ||
| @@ -97,7 +105,9 @@ | |||
| 97 | (defvar gdb-selected-frame nil) | 105 | (defvar gdb-selected-frame nil) |
| 98 | (defvar gdb-frame-number nil) | 106 | (defvar gdb-frame-number nil) |
| 99 | (defvar gdb-current-language nil) | 107 | (defvar gdb-current-language nil) |
| 100 | (defvar gdb-var-list nil "List of variables in watch window.") | 108 | (defvar gdb-var-list nil |
| 109 | "List of variables in watch window. | ||
| 110 | Each element has the form (EXPRESSION VARNUM NUMCHILD TYPE VALUE CHANGED-P).") | ||
| 101 | (defvar gdb-var-changed nil "Non-nil means that `gdb-var-list' has changed.") | 111 | (defvar gdb-var-changed nil "Non-nil means that `gdb-var-list' has changed.") |
| 102 | (defvar gdb-main-file nil "Source file from which program execution begins.") | 112 | (defvar gdb-main-file nil "Source file from which program execution begins.") |
| 103 | (defvar gdb-overlay-arrow-position nil) | 113 | (defvar gdb-overlay-arrow-position nil) |
| @@ -663,7 +673,7 @@ type=\"\\(.*?\\)\"") | |||
| 663 | 'gdb-var-update-handler)) | 673 | 'gdb-var-update-handler)) |
| 664 | (push 'gdb-var-update gdb-pending-triggers))) | 674 | (push 'gdb-var-update gdb-pending-triggers))) |
| 665 | 675 | ||
| 666 | (defconst gdb-var-update-regexp "name=\"\\(.*?\\)\"") | 676 | (defconst gdb-var-update-regexp "name=\"\\(.*?\\)\",in_scope=\"\\(.*?\\)\"") |
| 667 | 677 | ||
| 668 | (defun gdb-var-update-handler () | 678 | (defun gdb-var-update-handler () |
| 669 | (goto-char (point-min)) | 679 | (goto-char (point-min)) |
| @@ -1204,7 +1214,6 @@ happens to be appropriate." | |||
| 1204 | ;; FIXME: with GDB-6 on Darwin, this might very well work. | 1214 | ;; FIXME: with GDB-6 on Darwin, this might very well work. |
| 1205 | ;; Only needed/used with speedbar/watch expressions. | 1215 | ;; Only needed/used with speedbar/watch expressions. |
| 1206 | (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) | 1216 | (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) |
| 1207 | (setq gdb-var-changed t) ; force update | ||
| 1208 | (dolist (var gdb-var-list) | 1217 | (dolist (var gdb-var-list) |
| 1209 | (setcar (nthcdr 5 var) nil)) | 1218 | (setcar (nthcdr 5 var) nil)) |
| 1210 | (if (string-equal gdb-version "pre-6.4") | 1219 | (if (string-equal gdb-version "pre-6.4") |
| @@ -3028,7 +3037,8 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}") | |||
| 3028 | 'gdb-var-update-handler-1)) | 3037 | 'gdb-var-update-handler-1)) |
| 3029 | (push 'gdb-var-update gdb-pending-triggers)))) | 3038 | (push 'gdb-var-update gdb-pending-triggers)))) |
| 3030 | 3039 | ||
| 3031 | (defconst gdb-var-update-regexp-1 "name=\"\\(.*?\\)\",value=\\(\".*?\"\\),") | 3040 | (defconst gdb-var-update-regexp-1 |
| 3041 | "name=\"\\(.*?\\)\",\\(?:value=\\(\".*?\"\\),\\)?in_scope=\"\\(.*?\\)\"") | ||
| 3032 | 3042 | ||
| 3033 | (defun gdb-var-update-handler-1 () | 3043 | (defun gdb-var-update-handler-1 () |
| 3034 | (goto-char (point-min)) | 3044 | (goto-char (point-min)) |
| @@ -3040,7 +3050,10 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}") | |||
| 3040 | (if (string-equal varnum (cadr var)) | 3050 | (if (string-equal varnum (cadr var)) |
| 3041 | (progn | 3051 | (progn |
| 3042 | (setcar (nthcdr 5 var) t) | 3052 | (setcar (nthcdr 5 var) t) |
| 3043 | (setcar (nthcdr 4 var) (read (match-string 2))) | 3053 | (setcar (nthcdr 4 var) |
| 3054 | (if (string-equal (match-string 3) "true") | ||
| 3055 | (read (match-string 2)) | ||
| 3056 | "*changed*")) | ||
| 3044 | (setcar (nthcdr num gdb-var-list) var) | 3057 | (setcar (nthcdr num gdb-var-list) var) |
| 3045 | (throw 'var-found1 nil))) | 3058 | (throw 'var-found1 nil))) |
| 3046 | (setq num (+ num 1)))))) | 3059 | (setq num (+ num 1)))))) |