From e8f8aaa263b778adee2a3568bff9b7d1cc8e4d05 Mon Sep 17 00:00:00 2001
From: hjk <hjk@theqtcompany.com>
Date: Wed, 18 Mar 2015 16:48:57 +0100
Subject: [PATCH] Debugger: Fix dumper format choosing with GDB

... and further unify GDB and LLDB code paths.

Change-Id: Id89f3804c53190c4888082891fd3c3c55eceac84
Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
---
 share/qtcreator/debugger/dumper.py       | 23 +++++++++++------------
 share/qtcreator/debugger/gdbbridge.py    |  6 ++++++
 share/qtcreator/debugger/lldbbridge.py   | 10 ++++++----
 src/plugins/debugger/gdb/gdbengine.cpp   |  4 ++--
 src/plugins/debugger/lldb/lldbengine.cpp |  8 +++++++-
 src/plugins/debugger/lldb/lldbengine.h   |  1 +
 tests/auto/debugger/tst_dumpers.cpp      |  2 +-
 7 files changed, 34 insertions(+), 20 deletions(-)

diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py
index 252f84f9888..6fa45a43c74 100644
--- a/share/qtcreator/debugger/dumper.py
+++ b/share/qtcreator/debugger/dumper.py
@@ -1706,7 +1706,7 @@ class DumperBase:
         except:
             pass
 
-    def setupDumper(self, _ = {}):
+    def setupDumpers(self, _ = {}):
         self.qqDumpers = {}
         self.qqFormats = {}
         self.qqEditable = {}
@@ -1719,27 +1719,26 @@ class DumperBase:
                 item = dic[name]
                 self.registerDumper(name, item)
 
-        return self.reportDumpers()
-
-    def reportDumpers(self, _ = {}):
-        result = "dumpers=["
+        msg = "dumpers=["
         for key, value in self.qqFormats.items():
             if key in self.qqEditable:
-                result += '{type="%s",formats="%s",editable="true"},' % (key, value)
+                msg += '{type="%s",formats="%s",editable="true"},' % (key, value)
             else:
-                result += '{type="%s",formats="%s"},' % (key, value)
-        result += ']'
-        return result
+                msg += '{type="%s",formats="%s"},' % (key, value)
+        msg += ']'
+        self.reportDumpers(msg)
 
-    def reloadDumper(self, args):
+    def reportDumpers(self, msg):
+        raise NotImplementedError # Pure
+
+    def reloadDumpers(self, args):
         for mod in self.dumpermodules:
             m = sys.modules[mod]
             if sys.version_info[0] >= 3:
                 importlib.reload(m)
             else:
                 reload(m)
-
-        self.setupDumper(args)
+        self.setupDumpers(args)
 
     def addDumperModule(self, args):
         path = args['path']
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py
index e60e3a6e922..089c4ae4610 100644
--- a/share/qtcreator/debugger/gdbbridge.py
+++ b/share/qtcreator/debugger/gdbbridge.py
@@ -1660,6 +1660,12 @@ class Dumper(DumperBase):
             matplotQuit()
         gdb.execute("quit")
 
+    def loadDumpers(self, args):
+        self.setupDumpers()
+
+    def reportDumpers(self, msg):
+        print(msg)
+
     def profile1(self, args):
         """Internal profiling"""
         import tempfile
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index 0460a4d689f..4d814223880 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -1670,10 +1670,12 @@ class Dumper(DumperBase):
             result += ',offset="%s"},' % (addr - base)
         self.report(result + ']')
 
-    def loadDumperFiles(self, args):
+    def loadDumpers(self, args):
         self.reportToken(args)
-        result = self.setupDumper()
-        self.report(result)
+        self.setupDumpers()
+
+    def reportDumpers(self, msg):
+        self.report(msg)
 
     def fetchMemory(self, args):
         address = args['address']
@@ -1721,7 +1723,7 @@ class Tester(Dumper):
         self.expandedINames = set(expandedINames)
         self.passExceptions = True
 
-        self.loadDumperFiles({})
+        self.loadDumpers({})
         error = lldb.SBError()
         self.target = self.debugger.CreateTarget(binary, None, None, True, error)
 
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 040d1e7152c..d4ecc5fd908 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -4273,7 +4273,7 @@ void GdbEngine::startGdb(const QStringList &args)
     if (!commands.isEmpty())
         postCommand(commands.toLocal8Bit(), flags);
 
-    runCommand(DebuggerCommand("setupDumper", flags, CB(handlePythonSetup)));
+    runCommand(DebuggerCommand("loadDumpers", flags, CB(handlePythonSetup)));
 }
 
 void GdbEngine::handleGdbStartFailed()
@@ -4303,7 +4303,7 @@ void GdbEngine::loadInitScript()
 
 void GdbEngine::reloadDebuggingHelpers()
 {
-    runCommand("reloadDumper");
+    runCommand("reloadDumpers");
     reloadLocals();
 }
 
diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp
index de7399b034a..863d13968f2 100644
--- a/src/plugins/debugger/lldb/lldbengine.cpp
+++ b/src/plugins/debugger/lldb/lldbengine.cpp
@@ -303,7 +303,7 @@ void LldbEngine::setupInferior()
         runCommand(cmd);
     }
 
-    DebuggerCommand cmd1("loadDumperFiles");
+    DebuggerCommand cmd1("loadDumpers");
     runCommand(cmd1);
 }
 
@@ -1160,6 +1160,12 @@ void LldbEngine::reloadRegisters()
         runCommand("reportRegisters");
 }
 
+void LldbEngine::reloadDebuggingHelpers()
+{
+    runCommand("reloadDumpers");
+    updateAll();
+}
+
 void LldbEngine::fetchDisassembler(DisassemblerAgent *agent)
 {
     QPointer<DisassemblerAgent> p(agent);
diff --git a/src/plugins/debugger/lldb/lldbengine.h b/src/plugins/debugger/lldb/lldbengine.h
index 9e02351c732..31c404e4249 100644
--- a/src/plugins/debugger/lldb/lldbengine.h
+++ b/src/plugins/debugger/lldb/lldbengine.h
@@ -116,6 +116,7 @@ private:
     void reloadRegisters();
     void reloadSourceFiles() {}
     void reloadFullStack();
+    void reloadDebuggingHelpers();
     void fetchDisassembler(Internal::DisassemblerAgent *);
     void refreshDisassembly(const GdbMi &data);
 
diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp
index 1f6c947ca73..8b1328619de 100644
--- a/tests/auto/debugger/tst_dumpers.cpp
+++ b/tests/auto/debugger/tst_dumpers.cpp
@@ -1240,7 +1240,7 @@ void tst_Dumpers::dumper()
         cmds += "python sys.path.insert(1, '" + dumperDir + "')\n"
                 "python sys.path.append('" + uninstalledData + "')\n"
                 "python from gdbbridge import *\n"
-                "python theDumper.setupDumper()\n"
+                "python theDumper.setupDumpers()\n"
                 "run " + nograb + "\n"
                 "python theDumper.showData({'fancy':1,'forcens':1,'autoderef':1,"
                         "'dyntype':1,'passExceptions':1,'expanded':[" + expandedq + "]})\n";
-- 
GitLab