forked from qt-creator/qt-creator
Debugger: Implement "Create Full Backtrace" for LLDB
Task-number: QTCREATORBUG-11642 Change-Id: I92d7cde1e5021ab06ad72a00645184c41dae0e6b Reviewed-by: Ulf Hermann <ulf.hermann@digia.com> Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
@@ -1562,6 +1562,12 @@ class Dumper(DumperBase):
|
|||||||
def requestModuleSymbols(self, frame):
|
def requestModuleSymbols(self, frame):
|
||||||
self.handleCommand("target module list " + frame)
|
self.handleCommand("target module list " + frame)
|
||||||
|
|
||||||
|
def createFullBacktrace(self, _ = None):
|
||||||
|
command = "thread backtrace all"
|
||||||
|
result = lldb.SBCommandReturnObject()
|
||||||
|
self.debugger.GetCommandInterpreter().HandleCommand(command, result)
|
||||||
|
self.report('full-backtrace="%s"' % self.hexencode(result.GetOutput()))
|
||||||
|
|
||||||
def executeDebuggerCommand(self, args):
|
def executeDebuggerCommand(self, args):
|
||||||
result = lldb.SBCommandReturnObject()
|
result = lldb.SBCommandReturnObject()
|
||||||
command = args['command']
|
command = args['command']
|
||||||
|
@@ -108,7 +108,7 @@ LldbEngine::LldbEngine(const DebuggerStartParameters &startParameters)
|
|||||||
connect(debuggerCore()->action(AutoDerefPointers), SIGNAL(valueChanged(QVariant)),
|
connect(debuggerCore()->action(AutoDerefPointers), SIGNAL(valueChanged(QVariant)),
|
||||||
SLOT(updateLocals()));
|
SLOT(updateLocals()));
|
||||||
connect(debuggerCore()->action(CreateFullBacktrace), SIGNAL(triggered()),
|
connect(debuggerCore()->action(CreateFullBacktrace), SIGNAL(triggered()),
|
||||||
SLOT(updateAll()));
|
SLOT(createFullBacktrace()));
|
||||||
connect(debuggerCore()->action(UseDebuggingHelpers), SIGNAL(valueChanged(QVariant)),
|
connect(debuggerCore()->action(UseDebuggingHelpers), SIGNAL(valueChanged(QVariant)),
|
||||||
SLOT(updateLocals()));
|
SLOT(updateLocals()));
|
||||||
connect(debuggerCore()->action(UseDynamicType), SIGNAL(valueChanged(QVariant)),
|
connect(debuggerCore()->action(UseDynamicType), SIGNAL(valueChanged(QVariant)),
|
||||||
@@ -432,6 +432,8 @@ void LldbEngine::handleResponse(const QByteArray &response)
|
|||||||
refreshMemory(item);
|
refreshMemory(item);
|
||||||
else if (name == "continuation")
|
else if (name == "continuation")
|
||||||
runContinuation(item);
|
runContinuation(item);
|
||||||
|
else if (name == "full-backtrace")
|
||||||
|
showFullBacktrace(item);
|
||||||
else if (name == "statusmessage") {
|
else if (name == "statusmessage") {
|
||||||
QString msg = QString::fromUtf8(item.data());
|
QString msg = QString::fromUtf8(item.data());
|
||||||
if (msg.size())
|
if (msg.size())
|
||||||
@@ -441,6 +443,12 @@ void LldbEngine::handleResponse(const QByteArray &response)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LldbEngine::showFullBacktrace(const GdbMi &data)
|
||||||
|
{
|
||||||
|
debuggerCore()->openTextEditor(_("Backtrace $"),
|
||||||
|
QString::fromUtf8(QByteArray::fromHex(data.data())));
|
||||||
|
}
|
||||||
|
|
||||||
void LldbEngine::runContinuation(const GdbMi &data)
|
void LldbEngine::runContinuation(const GdbMi &data)
|
||||||
{
|
{
|
||||||
const QByteArray target = data.data();
|
const QByteArray target = data.data();
|
||||||
@@ -1252,6 +1260,10 @@ void LldbEngine::fetchDisassembler(DisassemblerAgent *agent)
|
|||||||
runCommand(cmd);
|
runCommand(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LldbEngine::createFullBacktrace()
|
||||||
|
{
|
||||||
|
runCommand("createFullBacktrace");
|
||||||
|
}
|
||||||
|
|
||||||
void LldbEngine::fetchMemory(MemoryAgent *agent, QObject *editorToken,
|
void LldbEngine::fetchMemory(MemoryAgent *agent, QObject *editorToken,
|
||||||
quint64 addr, quint64 length)
|
quint64 addr, quint64 length)
|
||||||
|
@@ -162,6 +162,7 @@ private:
|
|||||||
Q_SLOT void runEngine2();
|
Q_SLOT void runEngine2();
|
||||||
Q_SLOT void updateAll();
|
Q_SLOT void updateAll();
|
||||||
Q_SLOT void updateLocals();
|
Q_SLOT void updateLocals();
|
||||||
|
Q_SLOT void createFullBacktrace();
|
||||||
void doUpdateLocals(UpdateParameters params);
|
void doUpdateLocals(UpdateParameters params);
|
||||||
void refreshAll(const GdbMi &all);
|
void refreshAll(const GdbMi &all);
|
||||||
void refreshThreads(const GdbMi &threads);
|
void refreshThreads(const GdbMi &threads);
|
||||||
@@ -181,6 +182,7 @@ private:
|
|||||||
void refreshChangedBreakpoint(const GdbMi &bkpts);
|
void refreshChangedBreakpoint(const GdbMi &bkpts);
|
||||||
void refreshRemovedBreakpoint(const GdbMi &bkpts);
|
void refreshRemovedBreakpoint(const GdbMi &bkpts);
|
||||||
void runContinuation(const GdbMi &data);
|
void runContinuation(const GdbMi &data);
|
||||||
|
void showFullBacktrace(const GdbMi &data);
|
||||||
|
|
||||||
typedef void (LldbEngine::*LldbCommandContinuation)();
|
typedef void (LldbEngine::*LldbCommandContinuation)();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user