diff options
Diffstat (limited to 'src/plugins/debugger/cdb/cdbengine.cpp')
-rw-r--r-- | src/plugins/debugger/cdb/cdbengine.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 211545a708..8596209a70 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -41,6 +41,7 @@ #include <debugger/debuggertooltipmanager.h> #include <debugger/disassembleragent.h> #include <debugger/disassemblerlines.h> +#include <debugger/enginemanager.h> #include <debugger/memoryagent.h> #include <debugger/moduleshandler.h> #include <debugger/registerhandler.h> @@ -732,7 +733,8 @@ bool CdbEngine::hasCapability(unsigned cap) const | CreateFullBacktraceCapability | OperateByInstructionCapability | RunToLineCapability - | MemoryAddressCapability); + | MemoryAddressCapability + | AdditionalQmlStackCapability); } void CdbEngine::executeStepIn(bool byInstruction) @@ -2630,6 +2632,8 @@ static StackFrames parseFrames(const GdbMi &gdbmi, bool *incomplete = nullptr) frame.language = QmlLanguage; } frame.function = frameMi["function"].data(); + if (frame.function.isEmpty()) + frame.function = frameMi["func"].data(); // GDB's *stopped messages frame.module = frameMi["from"].data(); frame.context = frameMi["context"].data(); frame.address = frameMi["address"].data().toULongLong(nullptr, 16); @@ -2687,6 +2691,14 @@ unsigned CdbEngine::parseStackTrace(const GdbMi &data, bool sourceStepInto) void CdbEngine::loadAdditionalQmlStack() { + // Creating a qml stack while the QmlEngine is stopped results in a frozen inferior. + const auto engineList = EngineManager::engines(); + for (DebuggerEngine *engine : engineList) { + if (engine->objectName() == "QmlEngine" && engine->state() == Debugger::InferiorStopOk) { + showMessage("Can't create a QML stack trace while the QML Debugger is in the Stopped state", StatusBar); + return; + } + } runCommand({"qmlstack", ExtensionCommand, CB(handleAdditionalQmlStack)}); } |