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