forked from qt-creator/qt-creator
Debugger: Rework register handling
Use register names as handle, not their index in the view. Store the raw real values, not some stringified version as primary data. Use subentries to break down bigger registers into smaller entities. Also remember the previous value of a register and show it in a tooltip. Change-Id: I8ae3cc8766a7b211bc7cc827c734e5cf6060825c Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com> Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
@@ -138,24 +138,27 @@ void MemoryView::setMarkup(const QList<MemoryMarkup> &m)
|
||||
\sa Debugger::Internal::MemoryAgent, Debugger::DebuggerEngine
|
||||
*/
|
||||
|
||||
RegisterMemoryView::RegisterMemoryView(QWidget *binEditor, QWidget *parent) :
|
||||
RegisterMemoryView::RegisterMemoryView(QWidget *binEditor, quint64 addr,
|
||||
const QByteArray ®Name,
|
||||
RegisterHandler *handler, QWidget *parent) :
|
||||
MemoryView(binEditor, parent),
|
||||
m_registerIndex(0), m_registerAddress(0)
|
||||
m_registerName(regName), m_registerAddress(addr)
|
||||
{
|
||||
connect(handler, &QAbstractItemModel::modelReset, this, &QWidget::close);
|
||||
connect(handler, &RegisterHandler::registerChanged, this, &RegisterMemoryView::onRegisterChanged);
|
||||
updateContents();
|
||||
}
|
||||
|
||||
void RegisterMemoryView::slotRegisterSet(const QModelIndex &index)
|
||||
void RegisterMemoryView::onRegisterChanged(const QByteArray &name, quint64 value)
|
||||
{
|
||||
if (m_registerIndex != index.row())
|
||||
return;
|
||||
const QVariant newAddressV = index.data(Qt::EditRole);
|
||||
if (newAddressV.type() == QVariant::ULongLong)
|
||||
setRegisterAddress(newAddressV.toULongLong());
|
||||
if (name == m_registerName)
|
||||
setRegisterAddress(value);
|
||||
}
|
||||
|
||||
QString RegisterMemoryView::title(const QString ®isterName, quint64 a)
|
||||
QString RegisterMemoryView::title(const QByteArray ®isterName, quint64 a)
|
||||
{
|
||||
return tr("Memory at Register \"%1\" (0x%2)").arg(registerName).arg(a, 0, 16);
|
||||
return tr("Memory at Register \"%1\" (0x%2)")
|
||||
.arg(QString::fromUtf8(registerName)).arg(a, 0, 16);
|
||||
}
|
||||
|
||||
void RegisterMemoryView::setRegisterAddress(quint64 v)
|
||||
@@ -171,25 +174,13 @@ void RegisterMemoryView::setRegisterAddress(quint64 v)
|
||||
setMarkup(registerMarkup(v, m_registerName));
|
||||
}
|
||||
|
||||
QList<MemoryMarkup> RegisterMemoryView::registerMarkup(quint64 a, const QString &name)
|
||||
QList<MemoryMarkup> RegisterMemoryView::registerMarkup(quint64 a, const QByteArray ®Name)
|
||||
{
|
||||
QList<MemoryMarkup> result;
|
||||
result.push_back(MemoryMarkup(a, 1, QColor(Qt::blue).lighter(),
|
||||
tr("Register \"%1\"").arg(name)));
|
||||
tr("Register \"%1\"").arg(QString::fromUtf8(regName))));
|
||||
return result;
|
||||
}
|
||||
|
||||
void RegisterMemoryView::init(RegisterHandler *h, int registerIndex)
|
||||
{
|
||||
m_registerIndex = registerIndex;
|
||||
m_registerName = QString::fromLatin1(h->registerAt(registerIndex).name);
|
||||
// Known issue: CDB might reset the model by changing the special
|
||||
// registers it reports.
|
||||
connect(h, SIGNAL(modelReset()), this, SLOT(close()));
|
||||
connect(h, SIGNAL(registerSet(QModelIndex)),
|
||||
this, SLOT(slotRegisterSet(QModelIndex)));
|
||||
setRegisterAddress(h->registerAt(m_registerIndex).editValue().toULongLong());
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace Debugger
|
||||
|
||||
Reference in New Issue
Block a user