diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index c6611fb4841e7603af014838ec2f1b6f120ebd53..08d502f986bb1fb2522e6e1f2c96d91085b2008e 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -1310,7 +1310,23 @@ void GdbEngine::handleExecRun(const GdbResultRecord &response, const QVariant &) { if (response.resultClass == GdbResultRunning) { qq->notifyInferiorRunning(); - } else if (response.resultClass == GdbResultError) { + } else { + QTC_ASSERT(response.resultClass == GdbResultError, /**/); + const QByteArray &msg = response.data.findChild("msg").data(); + QMessageBox::critical(q->mainWindow(), tr("Error"), + tr("Starting executable failed:\n") + QString::fromLocal8Bit(msg)); + QTC_ASSERT(q->status() == DebuggerInferiorRunning, /**/); + //interruptInferior(); + qq->notifyInferiorExited(); + } +} + +void GdbEngine::handleExecContinue(const GdbResultRecord &response, const QVariant &) +{ + if (response.resultClass == GdbResultRunning) { + qq->notifyInferiorRunning(); + } else { + QTC_ASSERT(response.resultClass == GdbResultError, /**/); const QByteArray &msg = response.data.findChild("msg").data(); if (msg == "Cannot find bounds of current function") { qq->notifyInferiorStopped(); @@ -1623,7 +1639,7 @@ bool GdbEngine::startDebugger(const QSharedPointer<DebuggerStartParameters> &sp) postCommand(_("tbreak main")); m_waitingForFirstBreakpointToBeHit = true; qq->notifyInferiorRunningRequested(); - postCommand(_("-exec-run")); + postCommand(_("-exec-run"), CB(handleExecRun)); #endif qq->breakHandler()->setAllPending(); } @@ -1636,7 +1652,7 @@ void GdbEngine::continueInferior() q->resetLocation(); setTokenBarrier(); qq->notifyInferiorRunningRequested(); - postCommand(_("-exec-continue"), CB(handleExecRun)); + postCommand(_("-exec-continue"), CB(handleExecContinue)); } void GdbEngine::handleStart(const GdbResultRecord &response, const QVariant &) @@ -1655,7 +1671,7 @@ void GdbEngine::handleStart(const GdbResultRecord &response, const QVariant &) postCommand(_("tbreak *") + needle.cap(1)); m_waitingForFirstBreakpointToBeHit = true; qq->notifyInferiorRunningRequested(); - postCommand(_("-exec-run")); + postCommand(_("-exec-run"), CB(handleExecRun)); } else { debugMessage(_("PARSING START ADDRESS FAILED: ") + msg); } @@ -1717,7 +1733,7 @@ void GdbEngine::handleSetTargetAsync(const GdbResultRecord &record, const QVaria void GdbEngine::handleTargetRemote(const GdbResultRecord &record, const QVariant &) { if (record.resultClass == GdbResultDone) { - //postCommand(_("-exec-continue"), CB(handleExecRun)); + //postCommand(_("-exec-continue"), CB(handleExecContinue)); handleAqcuiredInferior(); m_autoContinue = true; } else if (record.resultClass == GdbResultError) { @@ -1740,9 +1756,9 @@ void GdbEngine::stepExec() setTokenBarrier(); qq->notifyInferiorRunningRequested(); if (qq->isReverseDebugging()) - postCommand(_("reverse-step"), CB(handleExecRun)); + postCommand(_("reverse-step"), CB(handleExecContinue)); else - postCommand(_("-exec-step"), CB(handleExecRun)); + postCommand(_("-exec-step"), CB(handleExecContinue)); } void GdbEngine::stepIExec() @@ -1750,16 +1766,16 @@ void GdbEngine::stepIExec() setTokenBarrier(); qq->notifyInferiorRunningRequested(); if (qq->isReverseDebugging()) - postCommand(_("reverse-stepi"), CB(handleExecRun)); + postCommand(_("reverse-stepi"), CB(handleExecContinue)); else - postCommand(_("-exec-step-instruction"), CB(handleExecRun)); + postCommand(_("-exec-step-instruction"), CB(handleExecContinue)); } void GdbEngine::stepOutExec() { setTokenBarrier(); qq->notifyInferiorRunningRequested(); - postCommand(_("-exec-finish"), CB(handleExecRun)); + postCommand(_("-exec-finish"), CB(handleExecContinue)); } void GdbEngine::nextExec() @@ -1767,9 +1783,9 @@ void GdbEngine::nextExec() setTokenBarrier(); qq->notifyInferiorRunningRequested(); if (qq->isReverseDebugging()) - postCommand(_("reverse-next"), CB(handleExecRun)); + postCommand(_("reverse-next"), CB(handleExecContinue)); else - postCommand(_("-exec-next"), CB(handleExecRun)); + postCommand(_("-exec-next"), CB(handleExecContinue)); } void GdbEngine::nextIExec() @@ -1777,9 +1793,9 @@ void GdbEngine::nextIExec() setTokenBarrier(); qq->notifyInferiorRunningRequested(); if (qq->isReverseDebugging()) - postCommand(_("reverse-nexti"), CB(handleExecRun)); + postCommand(_("reverse-nexti"), CB(handleExecContinue)); else - postCommand(_("exec-next-instruction"), CB(handleExecRun)); + postCommand(_("exec-next-instruction"), CB(handleExecContinue)); } void GdbEngine::runToLineExec(const QString &fileName, int lineNumber)