diff options
author | Pawel Polanski <pawel.3.polanski@nokia.com> | 2010-10-01 18:37:30 +0200 |
---|---|---|
committer | Pawel Polanski <pawel.3.polanski@nokia.com> | 2010-10-01 18:41:18 +0200 |
commit | cbdf363709e8355785c60e10903da299c3cb1235 (patch) | |
tree | b682d58393c40bee986979e8b79289e80b70a225 /src/plugins/debugger/gdb/trkgdbadapter.cpp | |
parent | d40007938c721b4985cd4ee88baedbd935971a6c (diff) | |
download | qt-creator-cbdf363709e8355785c60e10903da299c3cb1235.tar.gz |
Unable to change the value of a variable while debugging Symbian - issue fixed
Reviewed-by: hjk
Diffstat (limited to 'src/plugins/debugger/gdb/trkgdbadapter.cpp')
-rw-r--r-- | src/plugins/debugger/gdb/trkgdbadapter.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
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<quint64, unsigned> 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..."); |