From cbdf363709e8355785c60e10903da299c3cb1235 Mon Sep 17 00:00:00 2001 From: Pawel Polanski Date: Fri, 1 Oct 2010 18:37:30 +0200 Subject: Unable to change the value of a variable while debugging Symbian - issue fixed Reviewed-by: hjk --- src/plugins/debugger/gdb/trkgdbadapter.cpp | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/plugins/debugger/gdb/trkgdbadapter.cpp') diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp index 1e32fcb26f..05d1ba6bc4 100644 --- a/src/plugins/debugger/gdb/trkgdbadapter.cpp +++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp @@ -829,6 +829,17 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd) sendGdbServerMessage("E20", msg.toLatin1()); } } // qPart/qXfer + + else if (cmd.startsWith("X")) { + logMessage(msgGdbPacket(QLatin1String("Write memory"))); + // X addr,length + sendGdbServerAck(); + const QPair addrLength = parseGdbReadMemoryRequest(cmd); + int pos = cmd.indexOf(':'); + m_snapshot.resetMemory(); + writeMemory(addrLength.first, cmd.mid(pos + 1, addrLength.second)); + } + else { logMessage(msgGdbPacket(QLatin1String("FIXME unknown: ") + QString::fromAscii(cmd)), LogWarning); @@ -1444,6 +1455,29 @@ void TrkGdbAdapter::readMemory(uint addr, uint len, bool buffered) tryAnswerGdbMemoryRequest(buffered); } +void TrkGdbAdapter::writeMemory(uint addr, const QByteArray &data) +{ + Q_ASSERT(data.size() < (2 << 16)); + if (m_verbose > 2) { + logMessage(_("writeMemory %1 bytes from 0x%2 blocksize=%3 data=%4") + .arg(data.size()).arg(addr, 0, 16).arg(MemoryChunkSize).arg(QString::fromLatin1(data.toHex()))); + } + + sendTrkMessage(0x11, TrkCB(handleWriteMemory), + trkWriteMemoryMessage(addr, data)); +} + +void TrkGdbAdapter::handleWriteMemory(const TrkResult &result) +{ + logMessage(" RESULT: " + result.toString() + result.cookie.toString()); + if (result.errorCode()) { + logMessage("ERROR: " + result.errorString(), LogError); + sendGdbServerMessage("E01"); + return; + } + sendGdbServerMessage("OK"); +} + void TrkGdbAdapter::interruptInferior() { sendTrkMessage(0x1a, TrkCallback(), trkInterruptMessage(), "Interrupting..."); -- cgit v1.2.1