diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index fc08421654e..421261408f0 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -1169,7 +1169,6 @@ class Dumper(DumperBase): else: state = self.process.GetState() if state == lldb.eStateStopped: - self.reportStack() self.reportStackPosition() self.reportThreads() self.reportVariables() @@ -1259,7 +1258,6 @@ class Dumper(DumperBase): stoppedThread = self.firstStoppedThread() if stoppedThread: self.process.SetSelectedThread(stoppedThread) - self.reportStack({'stacklimit': 20}) self.reportStackTop() self.reportThreads() self.reportLocation() diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 86f1bb979eb..696ef9811fd 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -491,15 +491,17 @@ void LldbEngine::activateFrame(int frameIndex) if (state() != InferiorStopOk && state() != InferiorUnrunnable) return; - int limit = debuggerCore()->action(MaximalStackDepth)->value().toInt(); - int n = stackHandler()->stackSize(); - if (frameIndex == n) - limit = n * 10 + 3; + const int n = stackHandler()->stackSize(); + if (frameIndex == n) { + Command cmd("reportStack"); + cmd.arg("stacklimit", n * 10 + 3); + runCommand(cmd); + return; + } Command cmd("activateFrame"); cmd.arg("index", frameIndex); cmd.arg("thread", threadsHandler()->currentThread().raw()); - cmd.arg("stacklimit", limit); runCommand(cmd); updateAll(); @@ -883,9 +885,24 @@ bool LldbEngine::setToolTipExpression(const QPoint &mousePos, void LldbEngine::updateAll() { reloadRegisters(); + updateStack(); updateLocals(); } +void LldbEngine::reloadFullStack() +{ + Command cmd("reportStack"); + cmd.arg("stacklimit", -1); + runCommand(cmd); +} + +void LldbEngine::updateStack() +{ + Command cmd("reportStack"); + cmd.arg("stacklimit", 20); + runCommand(cmd); +} + ////////////////////////////////////////////////////////////////////// // // Watch specific stuff diff --git a/src/plugins/debugger/lldb/lldbengine.h b/src/plugins/debugger/lldb/lldbengine.h index f8ba1420943..65b2b89cbdf 100644 --- a/src/plugins/debugger/lldb/lldbengine.h +++ b/src/plugins/debugger/lldb/lldbengine.h @@ -134,7 +134,7 @@ private: void reloadModules(); void reloadRegisters(); void reloadSourceFiles() {} - void reloadFullStack() {} + void reloadFullStack(); void fetchDisassembler(Internal::DisassemblerAgent *); void refreshDisassembly(const GdbMi &data); @@ -161,6 +161,7 @@ private: Q_SLOT void handleResponse(const QByteArray &data); Q_SLOT void runEngine2(); Q_SLOT void updateAll(); + Q_SLOT void updateStack(); Q_SLOT void updateLocals(); Q_SLOT void createFullBacktrace(); void doUpdateLocals(UpdateParameters params);