aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Roberts2006-02-17 00:25:16 +0000
committerNick Roberts2006-02-17 00:25:16 +0000
commitb32d1b9b0198a6e74906eb520e8d65ec836e2fec (patch)
tree1223f53d28e32f25f071aa0c3748da1560c70bf9
parentcf5a5c38c6d1263cbdcf4561b25f5e6988f4c419 (diff)
downloademacs-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.el27
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.
110Each 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))))))