diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index a8178820ac2..7aa5d935c51 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -511,7 +511,6 @@ void DebuggerEngine::breakByFunction(const QString &functionName) void DebuggerEngine::resetLocation() { d->m_disassemblerViewAgent.resetLocation(); - d->m_stackHandler.setCurrentIndex(-1); debuggerCore()->removeLocationMark(); } diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 251e97aa20e..f2aeef41c19 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1201,10 +1201,14 @@ public slots: currentEngine()->frameUp(); } - void handleOperateByInstructionTriggered() + void handleOperateByInstructionTriggered(bool operateByInstructionTriggered) { - currentEngine()->gotoLocation( - currentEngine()->stackHandler()->currentFrame(), true); + // Go to source only if we have the file. + if (currentEngine()->stackHandler()->currentIndex() >= 0) { + const StackFrame frame = currentEngine()->stackHandler()->currentFrame(); + if (operateByInstructionTriggered || frame.isUsable()) + currentEngine()->gotoLocation(frame, true); + } } bool isActiveDebugLanguage(int lang) const @@ -1547,8 +1551,8 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments, act = m_actions.frameUpAction = new QAction(tr("Move to Calling Frame"), this); connect(act, SIGNAL(triggered()), SLOT(handleFrameUp())); - connect(debuggerCore()->action(OperateByInstruction), SIGNAL(triggered()), - SLOT(handleOperateByInstructionTriggered())); + connect(debuggerCore()->action(OperateByInstruction), SIGNAL(triggered(bool)), + SLOT(handleOperateByInstructionTriggered(bool))); connect(&m_statusTimer, SIGNAL(timeout()), SLOT(clearStatusMessage()));