diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 36b1087db9dcc027bdee02a7eec270bf75eaf3a2..957153da6cf81755521446d9389b2a3cb681037a 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -1274,15 +1274,10 @@ void CdbEngine::reloadRegisters() qDebug() << Q_FUNC_INFO << intBase; QString errorMessage; - const Registers oldRegisters = registerHandler()->registers(); - Registers registers = getRegisters(m_d->interfaces().debugControl, + const Registers registers = getRegisters(m_d->interfaces().debugControl, m_d->interfaces().debugRegisters, &errorMessage, intBase); if (registers.isEmpty() && !errorMessage.isEmpty()) warning(msgFunctionFailed("reloadRegisters" , errorMessage)); - for (int i = qMin(registers.size(), oldRegisters.size()); --i >= 0; ) { - Register ® = registers[i]; - reg.changed = (reg.value != oldRegisters.at(i).value); - } registerHandler()->setRegisters(registers); } diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 45a09f4743a79804a6daa76e130b75c74dc8fd05..37e3d15bfa291f8d024d4472ae15e8eb16c223da 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3110,13 +3110,10 @@ void GdbEngine::handleRegisterListValues(const GdbResponse &response) handled = true; } } - const QString value = _(handled ? ba : val.data()); - reg.changed = (value != reg.value); - if (reg.changed) - reg.value = value; + reg.value = _(handled ? ba : val.data()); } } - registerHandler()->setRegisters(registers); + registerHandler()->setAndMarkRegisters(registers); } diff --git a/src/plugins/debugger/gdb/symbian.cpp b/src/plugins/debugger/gdb/symbian.cpp index 34e87921753339da2ec86a7078d3cd84583dd82c..df7b56b45da09977bb3190b875c197bedcf8df45 100644 --- a/src/plugins/debugger/gdb/symbian.cpp +++ b/src/plugins/debugger/gdb/symbian.cpp @@ -482,19 +482,12 @@ void Snapshot::syncRegisters(uint threadId, RegisterHandler *handler) const QTC_ASSERT(debuggerRegisters.size() >= RegisterPSGdb, qDebug() << "HAVE: " << debuggerRegisters.size(); return); - bool changed = false; for (int i = 0; i < RegisterCount; ++i) { const int gdbIndex = i == RegisterPSTrk ? int(RegisterPSGdb) : i; Register ® = debuggerRegisters[gdbIndex]; - const QString value = trk::hexxNumber(thread.registers[i]); - reg.changed = (value != reg.value); - if (reg.changed) { - reg.value = value; - changed = true; - } + reg.value = trk::hexxNumber(thread.registers[i]); } - if (changed) - handler->setRegisters(debuggerRegisters); + handler->setAndMarkRegisters(debuggerRegisters); } void Snapshot::parseGdbStepRange(const QByteArray &cmd, bool so) diff --git a/src/plugins/debugger/registerhandler.cpp b/src/plugins/debugger/registerhandler.cpp index 164342b57631911f79baadc4d36c7c78b9ccbba9..272ba9928e9cac691d7f53bc5fad1dc7f20bec85 100644 --- a/src/plugins/debugger/registerhandler.cpp +++ b/src/plugins/debugger/registerhandler.cpp @@ -187,6 +187,15 @@ void RegisterHandler::setRegisters(const Registers ®isters) reset(); } +void RegisterHandler::setAndMarkRegisters(const Registers ®isters) +{ + const Registers old = m_registers; + m_registers = registers; + for (int i = qMin(m_registers.size(), old.size()); --i >= 0; ) + m_registers[i].changed = m_registers[i].value != old[i].value; + reset(); +} + Registers RegisterHandler::registers() const { return m_registers; diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h index 0818de9c95dad89bec2af8aa8c4300b19c28061c..740acc0d15264dc0e60d6fd7ecb7450c61c0d157 100644 --- a/src/plugins/debugger/registerhandler.h +++ b/src/plugins/debugger/registerhandler.h @@ -63,6 +63,7 @@ public: bool isEmpty() const; // nothing known so far? void setRegisters(const Registers ®isters); + void setAndMarkRegisters(const Registers ®isters); Registers registers() const; void removeAll(); Q_SLOT void setNumberBase(int base);