From b981f5049d0d016c5c0abfabd1ed293d3886ebe4 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 5 Mar 2015 10:41:16 +0100 Subject: [PATCH] Debugger: Let LldbEngine pass current token to dumper Change-Id: Ifea751354f637f67e640d36ba1baa95678c86ee9 Reviewed-by: hjk --- share/qtcreator/debugger/lldbbridge.py | 24 ++++++++++++++++++++---- src/plugins/debugger/lldb/lldbengine.cpp | 15 +++++++++++---- src/plugins/debugger/lldb/lldbengine.h | 1 - 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 1dfd7233e14..959d2008bbd 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -633,6 +633,7 @@ class Dumper(DumperBase): return None def setupInferior(self, args): + self.reportToken(args) error = lldb.SBError() self.executable_ = args['executable'] @@ -686,6 +687,7 @@ class Dumper(DumperBase): s.start() def prepare(self, args): + self.reportToken(args) error = lldb.SBError() listener = self.debugger.GetListener() @@ -821,6 +823,7 @@ class Dumper(DumperBase): return None def reportStack(self, args): + self.reportToken(args) if not self.process: self.report('msg="No process"') return @@ -891,6 +894,12 @@ class Dumper(DumperBase): self.report(result) self.reportContinuation(args) + def reportToken(self, args): + if "token" in args: + # Unusual syntax intended, to support the double-click in left + # logview pane feature. + self.report('token(\"%s\")' % args["token"]) + def reportContinuation(self, args): if "continuation" in args: self.report('continuation=\"%s\"' % args["continuation"]) @@ -1529,17 +1538,21 @@ class Dumper(DumperBase): self.process.Kill() self.reportState("inferiorshutdownok") - def quit(self, _ = None): + def quit(self, args = {}): + self.reportToken(args) self.reportState("engineshutdownok") self.process.Kill() - def executeStepI(self, _ = None): + def executeStepI(self, args = {}): + self.reportToken(args) self.currentThread().StepInstruction(lldb.eOnlyThisThread) - def executeStepOut(self, _ = None): + def executeStepOut(self, args = {}): + self.reportToken(args) self.currentThread().StepOut() def executeRunToLocation(self, args): + self.reportToken(args) addr = args.get('address', 0) if addr: error = self.currentThread().RunToAddress(addr) @@ -1556,6 +1569,7 @@ class Dumper(DumperBase): self.reportData() def executeJumpToLocation(self, args): + self.reportToken(args) frame = self.currentFrame() if not frame: self.reportStatus("No frame available.") @@ -1612,6 +1626,7 @@ class Dumper(DumperBase): self.report('success="%d",output="%s",error="%s"' % (success, output, error)) def updateData(self, args): + self.reportToken(args) self.expandedINames = set(args.get('expanded', [])) self.autoDerefPointers = int(args.get('autoderef', '0')) self.useDynamicType = int(args.get('dyntype', '0')) @@ -1655,7 +1670,8 @@ class Dumper(DumperBase): result += ',offset="%s"},' % (addr - base) self.report(result + ']') - def loadDumperFiles(self, _ = None): + def loadDumperFiles(self, args): + self.reportToken(args) result = self.setupDumper() self.report(result) diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 8370ea6730b..71a16d2187b 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -75,6 +75,12 @@ using namespace Utils; namespace Debugger { namespace Internal { +static int ¤tToken() +{ + static int token = 0; + return token; +} + /////////////////////////////////////////////////////////////////////// // // LldbEngine @@ -85,7 +91,6 @@ LldbEngine::LldbEngine(const DebuggerStartParameters &startParameters) : DebuggerEngine(startParameters), m_continueAtNextSpontaneousStop(false) { m_lastAgentId = 0; - m_lastToken = 0; setObjectName(QLatin1String("LldbEngine")); if (startParameters.useTerminal) { @@ -126,11 +131,13 @@ void LldbEngine::executeDebuggerCommand(const QString &command, DebuggerLanguage runCommand(cmd); } -void LldbEngine::runCommand(const DebuggerCommand &command) +void LldbEngine::runCommand(const DebuggerCommand &command_) { QTC_ASSERT(m_lldbProc.state() == QProcess::Running, notifyEngineIll()); - ++m_lastToken; - QByteArray token = QByteArray::number(m_lastToken); + const int tok = ++currentToken(); + DebuggerCommand command = command_; + command.arg("token", tok); + QByteArray token = QByteArray::number(tok); QByteArray cmd = command.function + "({" + command.args + "})"; showMessage(_(token + cmd + '\n'), LogInput); m_lldbProc.write("script theDumper." + cmd + "\n"); diff --git a/src/plugins/debugger/lldb/lldbengine.h b/src/plugins/debugger/lldb/lldbengine.h index 87bdff27d93..e6a7e316d32 100644 --- a/src/plugins/debugger/lldb/lldbengine.h +++ b/src/plugins/debugger/lldb/lldbengine.h @@ -187,7 +187,6 @@ private: // FIXME: Make generic. int m_lastAgentId; - int m_lastToken; int m_continueAtNextSpontaneousStop; QMap, int> m_disassemblerAgents; QMap, int> m_memoryAgents;