Commit af57dc41 authored by hjk's avatar hjk

debugger: re-enable setting breakpoints while inferior is running

parent 40bb5032
......@@ -432,7 +432,7 @@ void DebuggerEngine::handleCommand(int role, const QVariant &value)
break;
case RequestExecInterruptRole:
d->doInterruptInferior();
requestInterruptInferior();
break;
case RequestExecResetRole:
......@@ -1412,6 +1412,11 @@ void DebuggerEngine::quitDebugger()
shutdownInferior();
}
void DebuggerEngine::requestInterruptInferior()
{
d->doInterruptInferior();
}
} // namespace Internal
} // namespace Debugger
......
......@@ -173,6 +173,8 @@ protected:
virtual void continueInferior() {}
virtual void interruptInferior() {}
virtual void requestInterruptInferior();
virtual void executeRunToLine(const QString &fileName, int lineNumber)
{ Q_UNUSED(fileName); Q_UNUSED(lineNumber); }
virtual void executeRunToFunction(const QString &functionName)
......
......@@ -54,6 +54,7 @@ AbstractGdbAdapter::~AbstractGdbAdapter()
//void AbstractGdbAdapter::runEngine()
//{
// QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
//}
/*
......
......@@ -78,7 +78,6 @@ void AttachGdbAdapter::runEngine()
{
QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
m_engine->notifyEngineRunAndInferiorStopOk();
m_engine->notifyInferiorRunRequested();
m_engine->continueInferiorInternal();
m_engine->showStatusMessage(tr("Attached to process %1.")
.arg(m_engine->inferiorPid()));
......
......@@ -654,13 +654,13 @@ void GdbEngine::interruptInferior()
void GdbEngine::interruptInferiorTemporarily()
{
interruptInferior();
foreach (const GdbCommand &cmd, m_commandsToRunOnTemporaryBreak) {
if (cmd.flags & LosesChild) {
notifyInferiorIll();
break;
return;
}
}
requestInterruptInferior();
}
void GdbEngine::maybeHandleInferiorPidChanged(const QString &pid0)
......@@ -1798,9 +1798,10 @@ unsigned GdbEngine::debuggerCapabilities() const
void GdbEngine::continueInferiorInternal()
{
QTC_ASSERT(state() == InferiorStopOk, qDebug() << state());
notifyInferiorRunRequested();
showStatusMessage(tr("Running requested..."), 5000);
QTC_ASSERT(state() == InferiorRunRequested, qDebug() << state());
//QTC_ASSERT(state() == InferiorStopOk || state() == InferiorSetupRequested,
// qDebug() << state());
postCommand("-exec-continue", RunRequest, CB(handleExecuteContinue));
}
......@@ -1815,9 +1816,7 @@ void GdbEngine::continueInferior()
QTC_ASSERT(state() == InferiorStopOk, qDebug() << state());
resetLocation();
setTokenBarrier();
notifyInferiorRunRequested();
continueInferiorInternal();
showStatusMessage(tr("Running requested..."), 5000);
}
void GdbEngine::executeStep()
......@@ -1953,7 +1952,6 @@ void GdbEngine::executeRunToFunction(const QString &functionName)
setTokenBarrier();
postCommand("-break-insert -t " + functionName.toLatin1());
showStatusMessage(tr("Run to function %1 requested...").arg(functionName), 5000);
notifyInferiorRunRequested();
continueInferiorInternal();
//postCommand("-exec-continue", handleExecuteRunToFunction);
}
......
......@@ -225,8 +225,8 @@ void RemoteGdbServerAdapter::handleTargetRemote(const GdbResponse &record)
void RemoteGdbServerAdapter::runEngine()
{
QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
m_engine->notifyEngineRunAndInferiorStopOk();
m_engine->notifyInferiorRunRequested();
m_engine->continueInferiorInternal();
}
......
......@@ -237,7 +237,7 @@ void TcfTrkGdbAdapter::handleTcfTrkRunControlModuleLoadContextSuspendedEvent(con
// + QByteArray::number(m_session.codeseg));
m_engine->postCommand("symbol-file \"" + symbolFile + "\"");
}
foreach(const QByteArray &s, Symbian::gdbStartupSequence())
foreach (const QByteArray &s, Symbian::gdbStartupSequence())
m_engine->postCommand(s);
m_engine->postCommand("target remote " + gdbServerName().toLatin1(),
CB(handleTargetRemote));
......@@ -299,7 +299,7 @@ void TcfTrkGdbAdapter::tcftrkEvent(const TcfTrkEvent &e)
const TcfTrkRunControlContextSuspendedEvent &se = static_cast<const TcfTrkRunControlContextSuspendedEvent &>(e);
const unsigned threadId = RunControlContext::threadIdFromTcdfId(se.id());
const QString reason = QString::fromUtf8(se.reasonID());
showMessage(QString::fromLatin1("Reset snapshot (Thread 0x%1 stopped: '%2')").
showMessage(_("Reset snapshot (Thread 0x%1 stopped: '%2')").
arg(threadId, 0, 16).arg(reason));
// Stopped in a new thread: Add.
m_snapshot.reset();
......@@ -544,7 +544,7 @@ void TcfTrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
const uint signalNumber = cmd.mid(1).toUInt(&ok, 16);
//TODO: Meaning of the message is not clear.
sendGdbServerAck();
logMessage(QString::fromLatin1("Not implemented 'Continue with signal' %1: ").arg(signalNumber), LogWarning);
logMessage(_("Not implemented 'Continue with signal' %1: ").arg(signalNumber), LogWarning);
sendGdbServerMessage("O" + QByteArray("Console output").toHex());
sendGdbServerMessage("W81"); // "Process exited with result 1
sendTrkContinue();
......@@ -646,7 +646,7 @@ void TcfTrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
sendGdbServerMessage("E20", "Data length mismatch " + cmd);
return;
}
logMessage(QString::fromLatin1("Writing %1 bytes from 0x%2: %3").
logMessage(_("Writing %1 bytes from 0x%2: %3").
arg(addrLength.second).arg(addrLength.first, 0, 16).
arg(QString::fromAscii(data.toHex())));
m_trkDevice->sendMemorySetCommand(TcfTrkCallback(this, &TcfTrkGdbAdapter::handleWriteMemory),
......@@ -680,7 +680,7 @@ void TcfTrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
const QPair<uint, uint> regnumValue = parseGdbWriteRegisterWriteRequest(cmd);
// FIXME: Assume all goes well.
m_snapshot.setRegisterValue(m_session.tid, regnumValue.first, regnumValue.second);
logMessage(QString::fromLatin1("Setting register #%1 to 0x%2").arg(regnumValue.first).arg(regnumValue.second, 0, 16));
logMessage(_("Setting register #%1 to 0x%2").arg(regnumValue.first).arg(regnumValue.second, 0, 16));
m_trkDevice->sendRegistersSetCommand(TcfTrkCallback(this, &TcfTrkGdbAdapter::handleWriteRegister),
currentThreadContextId(), regnumValue.first, regnumValue.second,
QVariant(regnumValue.first));
......@@ -803,7 +803,7 @@ void TcfTrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
else if (cmd == "s" || cmd.startsWith("vCont;s")) {
const uint pc = m_snapshot.registerValue(m_session.tid, RegisterPC);
logMessage(msgGdbPacket(QString::fromLatin1("Step range from 0x%1").
logMessage(msgGdbPacket(_("Step range from 0x%1").
arg(pc, 0, 16)));
sendGdbServerAck();
m_running = true;
......@@ -905,7 +905,7 @@ void TcfTrkGdbAdapter::gdbSetCurrentThread(const QByteArray &cmd, const char *wh
const QByteArray id = cmd.mid(2);
const int threadId = id == "-1" ? -1 : id.toInt(0, 16);
const QByteArray message = QByteArray(why) + QByteArray::number(threadId);
logMessage(msgGdbPacket(QString::fromLatin1(message)));
logMessage(msgGdbPacket(_(message)));
// Set thread for subsequent operations (`m', `M', `g', `G', et.al.).
// for 'other operations. 0 - any thread
//$Hg0#df
......@@ -977,7 +977,7 @@ void TcfTrkGdbAdapter::startAdapter()
connect(m_gdbServer, SIGNAL(newConnection()),
this, SLOT(handleGdbConnection()));
logMessage(QString::fromLatin1("Connecting to TCF TRK on %1:%2")
logMessage(_("Connecting to TCF TRK on %1:%2")
.arg(tcfTrkAddress).arg(tcfTrkPort));
tcfTrkSocket->connectToHost(tcfTrkAddress, tcfTrkPort);
}
......@@ -985,9 +985,10 @@ void TcfTrkGdbAdapter::startAdapter()
void TcfTrkGdbAdapter::setupInferior()
{
QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
m_trkDevice->sendProcessStartCommand(TcfTrkCallback(this, &TcfTrkGdbAdapter::handleCreateProcess),
m_remoteExecutable, m_uid, m_remoteArguments,
QString(), true);
m_trkDevice->sendProcessStartCommand(
TcfTrkCallback(this, &TcfTrkGdbAdapter::handleCreateProcess),
m_remoteExecutable, m_uid, m_remoteArguments,
QString(), true);
}
void TcfTrkGdbAdapter::addThread(unsigned id)
......@@ -1009,7 +1010,7 @@ void TcfTrkGdbAdapter::handleCreateProcess(const TcfTrkCommandResult &result)
qDebug() << "ProcessCreated: " << result.toString();
if (!result) {
const QString errorMessage = result.errorString();
logMessage(QString::fromLatin1("Failed to start process: %1").arg(errorMessage), LogError);
logMessage(_("Failed to start process: %1").arg(errorMessage), LogError);
m_engine->notifyInferiorSetupFailed(result.errorString());
return;
}
......@@ -1030,7 +1031,8 @@ void TcfTrkGdbAdapter::handleCreateProcess(const TcfTrkCommandResult &result)
void TcfTrkGdbAdapter::runEngine()
{
m_engine->notifyInferiorStopOk();
QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
m_engine->notifyEngineRunAndInferiorStopOk();
// Trigger the initial "continue" manually.
m_engine->continueInferiorInternal();
}
......@@ -1052,7 +1054,8 @@ void TcfTrkGdbAdapter::write(const QByteArray &data)
data1.chop(1);
bool ok;
const uint addr = data1.toUInt(&ok, 0);
logMessage(QString::fromLatin1("Direct step (@#) 0x%1: not implemented").arg(addr, 0, 16), LogError);
logMessage(_("Direct step (@#) 0x%1: not implemented").arg(addr, 0, 16),
LogError);
// directStep(addr);
return;
}
......@@ -1115,7 +1118,8 @@ void TcfTrkGdbAdapter::handleWriteRegister(const TcfTrkCommandResult &result)
if (result) {
sendGdbServerMessage("OK");
} else {
logMessage(QString::fromLatin1("ERROR writing register #%1: %2").arg(registerNumber).arg(result.errorString()), LogError);
logMessage(_("ERROR writing register #%1: %2")
.arg(registerNumber).arg(result.errorString()), LogError);
sendGdbServerMessage("E01");
}
}
......@@ -1353,7 +1357,7 @@ void TcfTrkGdbAdapter::sendTrkStepRange()
uint to = m_snapshot.lineToAddress;
const uint pc = m_snapshot.registerValue(m_session.tid, RegisterPC);
if (from <= pc && pc <= to) {
const QString msg = QString::fromLatin1("Step in 0x%1 .. 0x%2 instead of 0x%3...").
const QString msg = _("Step in 0x%1 .. 0x%2 instead of 0x%3...").
arg(from, 0, 16).arg(to, 0, 16).arg(pc, 0, 16);
showMessage(msg);
} else {
......@@ -1365,18 +1369,20 @@ void TcfTrkGdbAdapter::sendTrkStepRange()
(m_snapshot.stepOver ? RM_STEP_OVER : RM_STEP_INTO) :
(m_snapshot.stepOver ? RM_STEP_OVER_RANGE : RM_STEP_INTO_RANGE);
logMessage(QString::fromLatin1("Stepping from 0x%1 to 0x%2 (current PC=0x%3), mode %4").
logMessage(_("Stepping from 0x%1 to 0x%2 (current PC=0x%3), mode %4").
arg(from, 0, 16).arg(to, 0, 16).arg(pc).arg(int(mode)));
m_trkDevice->sendRunControlResumeCommand(TcfTrkCallback(this, &TcfTrkGdbAdapter::handleStep),
currentThreadContextId(),
mode, 1, from, to);
m_trkDevice->sendRunControlResumeCommand(
TcfTrkCallback(this, &TcfTrkGdbAdapter::handleStep),
currentThreadContextId(),
mode, 1, from, to);
}
void TcfTrkGdbAdapter::handleStep(const TcfTrkCommandResult &result)
{
if (!result) { // Try fallback with Continue.
logMessage(QString::fromLatin1("Error while stepping: %1 (fallback to 'continue')").arg(result.errorString()), LogWarning);
logMessage(_("Error while stepping: %1 (fallback to 'continue')").
arg(result.errorString()), LogWarning);
sendTrkContinue();
// Doing nothing as below does not work as gdb seems to insist on
// making some progress through a 'step'.
......
......@@ -143,7 +143,6 @@ void TermGdbAdapter::runEngine()
{
QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
m_engine->notifyEngineRunAndInferiorStopOk();
m_engine->notifyInferiorRunRequested();
m_engine->continueInferiorInternal();
}
......
......@@ -1615,6 +1615,8 @@ void TrkGdbAdapter::handleTargetRemote(const GdbResponse &record)
void TrkGdbAdapter::runEngine()
{
QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
m_engine->notifyEngineRunAndInferiorStopOk();
m_engine->continueInferiorInternal();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment