From 68ed29b3b40db09043419b8b4d4f3cdd57184808 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Fri, 8 Jan 2010 11:03:00 +0100
Subject: [PATCH] debugger: make watchers work with gdb 7.0 and 7.0.1

gdb 7.0 will still be considered unsupported due to the division-by-zero crash
---
 share/qtcreator/gdbmacros/dumper.py | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py
index b7ba0740e6b..7ffc59ff90c 100644
--- a/share/qtcreator/gdbmacros/dumper.py
+++ b/share/qtcreator/gdbmacros/dumper.py
@@ -42,7 +42,11 @@ def parseAndEvaluate(exp):
     # Work around non-existing gdb.parse_and_eval as in released 7.0
     gdb.execute("set logging redirect on")
     gdb.execute("set logging on")
-    gdb.execute("print %s" % exp)
+    try:
+        gdb.execute("print %s" % exp)
+    except:
+        gdb.execute("set logging off")
+        return None
     gdb.execute("set logging off")
     return gdb.history(0)
 
@@ -437,16 +441,6 @@ class FrameCommand(gdb.Command):
 
     def handleWatch(self, d, exp, name):
         #warn("HANDLING WATCH %s, NAME: %s" % (exp, name))
-        if not isGoodGdb():
-            d.beginHash()
-            d.put('iname="watch.%s",' % name)
-            d.put('name="%s",' % exp)
-            d.put('exp="%s",' % exp)
-            d.put('value="<unsupported gdb version>"',)
-            d.put('type="<unknown>",numchild="0"')
-            d.endHash()
-            return
-
         if exp.startswith("["):
             #warn("EVAL: EXP: %s" % exp)
             d.beginHash()
@@ -743,6 +737,14 @@ class Dumper:
         if not name is None:
             self.putName(name)
 
+        if item.value is None:
+            # Happens for non-available watchers in gdb versions that
+            # need to use gdb.execute instead of gdb.parse_and_eval
+            self.putValue("<not available>")
+            self.putType("<unknown>")
+            self.putNumChild(0)
+            return
+
         # FIXME: Gui shows references stripped?
         #warn(" ");
         #warn("REAL INAME: %s " % item.iname)
-- 
GitLab