diff options
author | hjk <hjk@qt.io> | 2017-06-22 11:21:58 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2017-06-22 09:37:37 +0000 |
commit | 4ecb1283fe4ee463e9b550d4575eb33ad9944a17 (patch) | |
tree | 76c8d485ae50e7d5a9ebf5c5363c35a74a554b7e | |
parent | 8ede32677e2dd86e3a7f474d33c1656fe3ea0f9b (diff) | |
download | qt-creator-4ecb1283fe4ee463e9b550d4575eb33ad9944a17.tar.gz |
Debugger: Do not crash in (im)possible situations
Task-number: QTCREATORBUG-18427
Change-Id: I800c2f8d4ea37b28022d789a2e519e4f5286f08a
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
-rw-r--r-- | src/plugins/debugger/debuggerplugin.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 16825ffa0c..4581f5ad5a 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -2311,26 +2311,32 @@ void DebuggerPluginPrivate::requestContextMenu(TextEditorWidget *widget, } // Run to, jump to line below in stopped state. - if (currentEngine()->state() == InferiorStopOk && args.isValid()) { + DebuggerEngine *engine = currentEngine(); + QTC_ASSERT(engine, return); + if (engine->state() == InferiorStopOk && args.isValid()) { menu->addSeparator(); - if (currentEngine()->hasCapability(RunToLineCapability)) { + if (engine->hasCapability(RunToLineCapability)) { auto act = menu->addAction(args.address ? DebuggerEngine::tr("Run to Address 0x%1").arg(args.address, 0, 16) : DebuggerEngine::tr("Run to Line %1").arg(args.lineNumber)); connect(act, &QAction::triggered, [this, args] { - currentEngine()->executeRunToLine(args); + DebuggerEngine *engine = currentEngine(); + QTC_ASSERT(engine, return); + engine->executeRunToLine(args); }); } - if (currentEngine()->hasCapability(JumpToLineCapability)) { + if (engine->hasCapability(JumpToLineCapability)) { auto act = menu->addAction(args.address ? DebuggerEngine::tr("Jump to Address 0x%1").arg(args.address, 0, 16) : DebuggerEngine::tr("Jump to Line %1").arg(args.lineNumber)); connect(act, &QAction::triggered, [this, args] { - currentEngine()->executeJumpToLine(args); + DebuggerEngine *engine = currentEngine(); + QTC_ASSERT(engine, return); + engine->executeJumpToLine(args); }); } // Disassemble current function in stopped state. - if (currentEngine()->hasCapability(DisassemblerCapability)) { + if (engine->hasCapability(DisassemblerCapability)) { StackFrame frame; frame.function = cppFunctionAt(args.fileName, lineNumber, 1); frame.line = 42; // trick gdb into mixed mode. @@ -2339,7 +2345,9 @@ void DebuggerPluginPrivate::requestContextMenu(TextEditorWidget *widget, .arg(frame.function); auto act = new QAction(text, menu); connect(act, &QAction::triggered, [this, frame] { - currentEngine()->openDisassemblerView(Location(frame)); + DebuggerEngine *engine = currentEngine(); + QTC_ASSERT(engine, return); + engine->openDisassemblerView(Location(frame)); }); menu->addAction(act); } |