From 534452158546dc2727784e82d695b05efc64fc04 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Wed, 28 Apr 2010 11:18:54 +0200
Subject: [PATCH] debugger: some python polishing

---
 share/qtcreator/gdbmacros/pdumper.py    | 70 ++++++++++++++++++-------
 src/plugins/debugger/pdb/pdbengine.cpp  |  2 +-
 tests/manual/gdbdebugger/python/math.py |  5 ++
 3 files changed, 57 insertions(+), 20 deletions(-)

diff --git a/share/qtcreator/gdbmacros/pdumper.py b/share/qtcreator/gdbmacros/pdumper.py
index 9086951e2b9..7d9a465e1d1 100644
--- a/share/qtcreator/gdbmacros/pdumper.py
+++ b/share/qtcreator/gdbmacros/pdumper.py
@@ -6,11 +6,11 @@ import linecache
 
 class qdebug:
     def __init__(self,
-            options = Null,
-            expanded = Null,
-            typeformats = Null,
-            individualformats = Null,
-            watchers = Null):
+            options = None,
+            expanded = None,
+            typeformats = None,
+            individualformats = None,
+            watchers = None):
         self.options = options
         self.expanded = expanded
         self.typeformats = typeformats
@@ -88,25 +88,57 @@ class qdebug:
         tt = self.cleanType(t)
         if tt == "module" or tt == "function":
             return
-        if tt == "list":
-            self.warn("LIST: %s" % dir(value))
-            self.put("{")
-            self.putField("iname", iname)
-            self.putName(name)
-            self.putType(tt)
-            self.putValue(value)
+        self.put("{")
+        self.putField("iname", iname)
+        self.putName(name)
+        self.putType(tt)
+        if tt == "list" or tt == "tuple":
+            self.putItemCount(len(value))
+            #self.putValue(value)
             self.put("children=[")
             for i in xrange(len(value)):
                 self.dumpValue(value[i], str(i), "%s.%d" % (iname, i))
             self.put("]")
-            self.put("},")
-        elif tt != "module" and tt != "function":
-            self.put("{")
-            self.putField("iname", iname)
-            self.putName(name)
-            self.putType(tt)
+        elif tt == "str":
+            v = value
+            self.putValue(v.encode('hex'))
+            self.putField("valueencoded", 6)
+            self.putNumChild(0)
+        elif tt == "unicode":
+            v = value
+            self.putValue(v.encode('hex'))
+            self.putField("valueencoded", 6)
+            self.putNumChild(0)
+        elif tt == "buffer":
+            v = str(value)
+            self.putValue(v.encode('hex'))
+            self.putField("valueencoded", 6)
+            self.putNumChild(0)
+        elif tt == "xrange":
+            b = iter(value).next()
+            e = b + len(value)
+            self.putValue("(%d, %d)" % (b, e))
+            self.putNumChild(0)
+        elif tt == "dict":
+            self.putItemCount(len(value))
+            self.putField("childnumchild", 2)
+            self.put("children=[")
+            i = 0
+            for (k, v) in value.iteritems():
+                self.put("{")
+                self.putType(" ")
+                self.putValue("%s: %s" % (k, v))
+                self.put("children=[")
+                self.dumpValue(k, "key", "%s.%d.k" % (iname, i))
+                self.dumpValue(v, "value", "%s.%d.v" % (iname, i))
+                self.put("]},")
+                i += 1
+            self.put("]")
+        elif tt == "module" or tt == "function":
+            pass
+        else:
             self.putValue(value)
-            self.put("},")
+        self.put("},")
 
 
     def warn(self, msg):
diff --git a/src/plugins/debugger/pdb/pdbengine.cpp b/src/plugins/debugger/pdb/pdbengine.cpp
index c33cfd450a8..0fa670239e4 100644
--- a/src/plugins/debugger/pdb/pdbengine.cpp
+++ b/src/plugins/debugger/pdb/pdbengine.cpp
@@ -179,7 +179,7 @@ void PdbEngine::startDebugger(const DebuggerStartParametersPtr &sp)
     m_commands.enqueue(cmd);
 
     m_pdbProc.start(m_pdb, gdbArgs);
-    qDebug() << "STARTING:" << m_pdb << gdbArgs;
+    //qDebug() << "STARTING:" << m_pdb << gdbArgs;
 
     if (!m_pdbProc.waitForStarted()) {
         const QString msg = tr("Unable to start pdb '%1': %2")
diff --git a/tests/manual/gdbdebugger/python/math.py b/tests/manual/gdbdebugger/python/math.py
index 63f3b2a7d52..5a59ecba582 100644
--- a/tests/manual/gdbdebugger/python/math.py
+++ b/tests/manual/gdbdebugger/python/math.py
@@ -5,6 +5,11 @@ def square(a):
 
 def cube(a):
     l = [1, 2, 4]
+    t = (1, 2, 3)
+    d = {1: 'one', 2: 'two', 'three': 3}
+    s = u'unixcode'
+    x = xrange(1, 10)
+    b = buffer("xxx")
     x = square(a)
     x = x * a
     x = x + 1
-- 
GitLab