Debugger: Handle the <more> item in LLDB stack view

Task-number: QTCREATORBUG-11915
Change-Id: I7216987c68802c9d3b74fbd5b543ea4aa5953ff8
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
This commit is contained in:
hjk
2014-04-09 13:16:27 +02:00
parent 88255a6881
commit 05f72338f3
3 changed files with 24 additions and 8 deletions

View File

@@ -1169,7 +1169,6 @@ class Dumper(DumperBase):
else: else:
state = self.process.GetState() state = self.process.GetState()
if state == lldb.eStateStopped: if state == lldb.eStateStopped:
self.reportStack()
self.reportStackPosition() self.reportStackPosition()
self.reportThreads() self.reportThreads()
self.reportVariables() self.reportVariables()
@@ -1259,7 +1258,6 @@ class Dumper(DumperBase):
stoppedThread = self.firstStoppedThread() stoppedThread = self.firstStoppedThread()
if stoppedThread: if stoppedThread:
self.process.SetSelectedThread(stoppedThread) self.process.SetSelectedThread(stoppedThread)
self.reportStack({'stacklimit': 20})
self.reportStackTop() self.reportStackTop()
self.reportThreads() self.reportThreads()
self.reportLocation() self.reportLocation()

View File

@@ -491,15 +491,17 @@ void LldbEngine::activateFrame(int frameIndex)
if (state() != InferiorStopOk && state() != InferiorUnrunnable) if (state() != InferiorStopOk && state() != InferiorUnrunnable)
return; return;
int limit = debuggerCore()->action(MaximalStackDepth)->value().toInt(); const int n = stackHandler()->stackSize();
int n = stackHandler()->stackSize(); if (frameIndex == n) {
if (frameIndex == n) Command cmd("reportStack");
limit = n * 10 + 3; cmd.arg("stacklimit", n * 10 + 3);
runCommand(cmd);
return;
}
Command cmd("activateFrame"); Command cmd("activateFrame");
cmd.arg("index", frameIndex); cmd.arg("index", frameIndex);
cmd.arg("thread", threadsHandler()->currentThread().raw()); cmd.arg("thread", threadsHandler()->currentThread().raw());
cmd.arg("stacklimit", limit);
runCommand(cmd); runCommand(cmd);
updateAll(); updateAll();
@@ -883,9 +885,24 @@ bool LldbEngine::setToolTipExpression(const QPoint &mousePos,
void LldbEngine::updateAll() void LldbEngine::updateAll()
{ {
reloadRegisters(); reloadRegisters();
updateStack();
updateLocals(); 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 // Watch specific stuff

View File

@@ -134,7 +134,7 @@ private:
void reloadModules(); void reloadModules();
void reloadRegisters(); void reloadRegisters();
void reloadSourceFiles() {} void reloadSourceFiles() {}
void reloadFullStack() {} void reloadFullStack();
void fetchDisassembler(Internal::DisassemblerAgent *); void fetchDisassembler(Internal::DisassemblerAgent *);
void refreshDisassembly(const GdbMi &data); void refreshDisassembly(const GdbMi &data);
@@ -161,6 +161,7 @@ private:
Q_SLOT void handleResponse(const QByteArray &data); Q_SLOT void handleResponse(const QByteArray &data);
Q_SLOT void runEngine2(); Q_SLOT void runEngine2();
Q_SLOT void updateAll(); Q_SLOT void updateAll();
Q_SLOT void updateStack();
Q_SLOT void updateLocals(); Q_SLOT void updateLocals();
Q_SLOT void createFullBacktrace(); Q_SLOT void createFullBacktrace();
void doUpdateLocals(UpdateParameters params); void doUpdateLocals(UpdateParameters params);