diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp index 174296632a39084c1421650a174529fd2c5aadb0..7f672b91a805dcf61966d7ae8ed6e9bdbb8f986c 100644 --- a/src/plugins/debugger/gdb/trkgdbadapter.cpp +++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp @@ -82,7 +82,7 @@ static const char *registerNames[KnownRegisters] = 0, "PSGdb" }; -static QByteArray dumpRegister(int n, uint value) +static QByteArray dumpRegister(uint n, uint value) { QByteArray ba; ba += ' '; @@ -356,7 +356,7 @@ QByteArray TrkGdbAdapter::trkStepRangeMessage(byte option) QByteArray ba; ba.reserve(17); appendByte(&ba, option); - qDebug() << "STEP ON " << hexxNumber(m_snapshot.registers[RegisterPC]); + //qDebug() << "STEP ON " << hexxNumber(m_snapshot.registers[RegisterPC]); appendInt(&ba, m_snapshot.registers[RegisterPC]); // Start address appendInt(&ba, m_snapshot.registers[RegisterPC]); // End address appendInt(&ba, m_session.pid); @@ -936,14 +936,22 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd) logMessage(msgGdbPacket(QLatin1String("Insert breakpoint"))); // $Z0,786a4ccc,4#99 const int pos = cmd.lastIndexOf(','); - bool ok = false; - const uint addr = cmd.mid(3, pos - 3).toInt(&ok, 16); - const uint len = cmd.mid(pos + 1).toInt(&ok, 16); - //qDebug() << "ADDR: " << hexNumber(addr) << " LEN: " << len; - logMessage(_("Inserting breakpoint at 0x%1, %2") - .arg(addr, 0, 16).arg(len)); - const QByteArray ba = trkBreakpointMessage(addr, len, len == 4); - sendTrkMessage(0x1B, TrkCB(handleAndReportSetBreakpoint), ba, addr); + bool ok1 = false; + bool ok2 = false; + const uint addr = cmd.mid(3, pos - 3).toUInt(&ok1, 16); + const uint len = cmd.mid(pos + 1).toUInt(&ok2, 16); + if (!ok1) { + logMessage("MISPARSED ADDRESS FROM " + cmd + + " (" + cmd.mid(3, pos - 3) + ")"); + } else if (!ok2) { + logMessage("MISPARSED BREAKPOINT SIZE FROM " + cmd); + } else { + //qDebug() << "ADDR: " << hexNumber(addr) << " LEN: " << len; + logMessage(_("Inserting breakpoint at 0x%1, %2") + .arg(addr, 0, 16).arg(len)); + const QByteArray ba = trkBreakpointMessage(addr, len, len == 4); + sendTrkMessage(0x1B, TrkCB(handleAndReportSetBreakpoint), ba, addr); + } } else if (cmd.startsWith("z0,") || cmd.startsWith("z1,")) { @@ -953,8 +961,8 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd) // $z0,786a4ccc,4#99 const int pos = cmd.lastIndexOf(','); bool ok = false; - const uint addr = cmd.mid(3, pos - 3).toInt(&ok, 16); - const uint len = cmd.mid(pos + 1).toInt(&ok, 16); + const uint addr = cmd.mid(3, pos - 3).toUInt(&ok, 16); + const uint len = cmd.mid(pos + 1).toUInt(&ok, 16); const uint bp = m_session.addressToBP[addr]; if (bp == 0) { logMessage(_("NO RECORDED BP AT 0x%1, %2") @@ -978,8 +986,8 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd) if (commaPos != -1) { bool ok1 = false, ok2 = false; const int offset = data.mid(offsetPos, commaPos - offsetPos) - .toInt(&ok1, 16); - const int length = data.mid(commaPos + 1).toInt(&ok2, 16); + .toUInt(&ok1, 16); + const int length = data.mid(commaPos + 1).toUInt(&ok2, 16); if (ok1 && ok2) { const QString msg = _("Read of OS auxiliary " "vector (%1, %2) not implemented.").arg(offset).arg(length); @@ -1248,7 +1256,7 @@ void TrkGdbAdapter::handleAndReportReadRegisters(const TrkResult &result) void TrkGdbAdapter::handleAndReportReadRegister(const TrkResult &result) { handleReadRegisters(result); - int registerNumber = result.cookie.toInt(); + uint registerNumber = result.cookie.toUInt(); QByteArray logMsg = "Read Register"; if (registerNumber == RegisterPSGdb) { QByteArray ba; @@ -1460,8 +1468,9 @@ void TrkGdbAdapter::handleStepInto(const TrkResult &result) m_snapshot.reset(); if (result.errorCode()) { logMessage("ERROR: " + result.errorString() + " in handleStepInto"); -#if 0 +#if 1 // Try fallback with Step Over + logMessage("FALLBACK TO 'STEP OVER'"); QByteArray ba = trkStepRangeMessage(0x11); // options "step over" sendTrkMessage(0x19, TrkCB(handleStepInto2), ba, "Step range"); #else @@ -1480,6 +1489,7 @@ void TrkGdbAdapter::handleStepInto2(const TrkResult &result) if (result.errorCode()) { logMessage("ERROR: " + result.errorString() + " in handleStepInto2"); #if 0 + logMessage("FALLBACK TO 'CONTINUE'"); // Try fallback with Continue sendTrkMessage(0x18, TrkCallback(), trkContinueMessage(), "CONTINUE"); //sendGdbServerMessage("S05", "Stepping finished"); @@ -1525,7 +1535,8 @@ void TrkGdbAdapter::handleAndReportSetBreakpoint(const TrkResult &result) // Error: 0x00 // [80 09 00 00 00 00 0A] if (result.errorCode()) { - logMessage("ERROR: " + result.errorString()); + logMessage("ERROR WHEN SETTING BREAKPOINT: " + result.errorString()); + sendGdbServerMessage("E21"); return; } uint bpnr = extractInt(result.data.data() + 1);