1
0
Fork 0

Introduce TraceRegisters

This commit is contained in:
torusrxxx 2020-07-12 12:08:53 +08:00 committed by Duncan Ogilvie
parent bd178e2b35
commit f58a925d89
10 changed files with 74 additions and 20 deletions

View File

@ -194,7 +194,7 @@ void CPURegistersView::refreshShortcutsSlot()
void CPURegistersView::mousePressEvent(QMouseEvent* event)
{
if(!DbgIsDebugging())
if(!isActive)
return;
if(event->y() < yTopSpacing - mButtonHeight)
@ -238,7 +238,7 @@ void CPURegistersView::mousePressEvent(QMouseEvent* event)
void CPURegistersView::mouseDoubleClickEvent(QMouseEvent* event)
{
if(!DbgIsDebugging() || event->button() != Qt::LeftButton)
if(!isActive || event->button() != Qt::LeftButton)
return;
// get mouse position
const int y = (event->y() - yTopSpacing) / (double)mRowHeight;
@ -260,7 +260,7 @@ void CPURegistersView::mouseDoubleClickEvent(QMouseEvent* event)
void CPURegistersView::keyPressEvent(QKeyEvent* event)
{
if(DbgIsDebugging())
if(isActive)
{
int key = event->key();
REGISTER_NAME newRegister = UNKNOWN;
@ -300,6 +300,11 @@ void CPURegistersView::debugStateChangedSlot(DBGSTATE state)
if(state == stopped)
{
updateRegistersSlot();
isActive = false;
}
else
{
isActive = true;
}
}
@ -767,7 +772,7 @@ void CPURegistersView::onFollowInMemoryMap()
void CPURegistersView::displayCustomContextMenuSlot(QPoint pos)
{
if(!DbgIsDebugging())
if(!isActive)
return;
QMenu wMenu(this);
QMenu* followInDumpNMenu = nullptr;

View File

@ -686,6 +686,7 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
setWindowTitle("Registers");
mChangeViewButton = NULL;
mFpuMode = 0;
isActive = false;
// general purposes register (we allow the user to modify the value)
mGPR.insert(CAX);
@ -1397,7 +1398,7 @@ QString RegistersView::helpRegister(REGISTER_NAME reg)
void RegistersView::mousePressEvent(QMouseEvent* event)
{
if(!DbgIsDebugging())
if(!isActive)
return;
if(event->y() < yTopSpacing - mButtonHeight)
@ -1424,7 +1425,7 @@ void RegistersView::mousePressEvent(QMouseEvent* event)
void RegistersView::mouseMoveEvent(QMouseEvent* event)
{
if(!DbgIsDebugging())
if(!isActive)
{
QScrollArea::mouseMoveEvent(event);
setCursor(QCursor(Qt::ArrowCursor));
@ -1472,7 +1473,7 @@ void RegistersView::paintEvent(QPaintEvent* event)
wPainter.fillRect(wPainter.viewport(), QBrush(ConfigColor("RegistersBackgroundColor")));
// Don't draw the registers if a program isn't actually running
if(!DbgIsDebugging())
if(!isActive)
return;
// Iterate all registers
@ -1958,7 +1959,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
//p->drawText(offset,mRowHeight*(mRegisterPlaces[reg].line+1),mRegisterMapping[reg]);
//set highlighting
if(DbgIsDebugging() && mRegisterUpdates.contains(reg))
if(isActive && mRegisterUpdates.contains(reg))
p->setPen(ConfigColor("RegistersModifiedColor"));
else
p->setPen(ConfigColor("RegistersColor"));
@ -1980,7 +1981,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
x += width;
if(mFPUx87_80BITSDISPLAY.contains(reg) && DbgIsDebugging())
if(mFPUx87_80BITSDISPLAY.contains(reg) && isActive)
{
p->setPen(ConfigColor("RegistersExtraInfoColor"));
x += 1 * mCharWidth; //1 space
@ -2019,7 +2020,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
p->setPen(ConfigColor("RegistersExtraInfoColor"));
if(DbgIsDebugging() && mRegisterUpdates.contains(reg))
if(isActive && mRegisterUpdates.contains(reg))
p->setPen(ConfigColor("RegistersModifiedColor"));
newText += ToLongDoubleString(((X87FPUREGISTER*) registerValue(&wRegDumpStruct, reg))->data);

View File

@ -136,8 +136,6 @@ public:
static void operator delete(void* p);
int getEstimateHeight();
void setRegisters(REGDUMP* reg); //This is really a protected member, but we need to put REGDUMP into it from TraceWidget
public slots:
virtual void refreshShortcutsSlot();
virtual void displayCustomContextMenuSlot(QPoint pos);
@ -183,10 +181,12 @@ protected slots:
//unsigned int GetMxCsrRCValueFromString(const char* string);
//unsigned int GetStatusWordTOPValueFromString(const char* string);
QString GetStatusWordTOPStateString(unsigned short state);
void setRegisters(REGDUMP* reg);
void appendRegister(QString & text, REGISTER_NAME reg, const char* name64, const char* name32);
void onCopyAllAction();
protected:
bool isActive;
QPushButton* mChangeViewButton;
bool mShowFpu;
int mVScrollOffset;

View File

@ -58,6 +58,11 @@ TraceBrowser::~TraceBrowser()
delete mDisasm;
}
bool TraceBrowser::isFileOpened() const
{
return mTraceFile && mTraceFile->Progress() == 100 && mTraceFile->Length() > 0;
}
QString TraceBrowser::getAddrText(dsint cur_addr, char label[MAX_LABEL_SIZE], bool getLabel)
{
QString addrText = "";
@ -145,7 +150,7 @@ RichTextPainter::List TraceBrowser::getRichBytes(const Instruction_t & instr) co
QString TraceBrowser::paintContent(QPainter* painter, dsint rowBase, int rowOffset, int col, int x, int y, int w, int h)
{
if(!mTraceFile || mTraceFile->Progress() != 100)
if(!isFileOpened())
{
return "";
}
@ -1031,7 +1036,7 @@ void TraceBrowser::closeFileSlot()
mTraceFile->Close();
delete mTraceFile;
mTraceFile = nullptr;
reloadData();
emit Bridge::getBridge()->updateTraceBrowser();
}
void TraceBrowser::closeDeleteSlot()
@ -1044,7 +1049,7 @@ void TraceBrowser::closeDeleteSlot()
mTraceFile->Delete();
delete mTraceFile;
mTraceFile = nullptr;
reloadData();
emit Bridge::getBridge()->updateTraceBrowser();
}
}
@ -1069,7 +1074,7 @@ void TraceBrowser::parseFinishedSlot()
mMRUList->addEntry(mFileName);
mMRUList->save();
}
reloadData();
emit Bridge::getBridge()->updateTraceBrowser();
}
void TraceBrowser::gotoSlot()

View File

@ -28,6 +28,8 @@ public:
duint getSelectionStart();
duint getSelectionEnd();
bool isFileOpened() const;
private:
enum TableColumnIndex
{

View File

@ -0,0 +1,17 @@
#include "TraceRegisters.h"
TraceRegisters::TraceRegisters(QWidget* parent) : RegistersView(parent)
{
}
void TraceRegisters::setRegisters(REGDUMP* registers)
{
this->RegistersView::setRegisters(registers);
}
void TraceRegisters::setActive(bool isActive)
{
this->isActive = isActive;
this->RegistersView::setRegisters(&this->wRegDumpStruct);
}

View File

@ -0,0 +1,15 @@
#ifndef TRACEREGISTERS_H
#define TRACEREGISTERS_H
#include "RegistersView.h"
class TraceRegisters : public RegistersView
{
Q_OBJECT
public:
TraceRegisters(QWidget* parent = 0);
void setRegisters(REGDUMP* registers);
void setActive(bool isActive);
};
#endif // TRACEREGISTERS_H

View File

@ -1,7 +1,7 @@
#include "TraceWidget.h"
#include "ui_TraceWidget.h"
#include "TraceBrowser.h"
#include "RegistersView.h"
#include "TraceRegisters.h"
#include "CPUInfoBox.h"
TraceWidget::TraceWidget(QWidget* parent) :
@ -13,7 +13,7 @@ TraceWidget::TraceWidget(QWidget* parent) :
mTraceWidget = new TraceBrowser(this);
mOverview = new StdTable(this);
mInfo = new CPUInfoBox(this);
mGeneralRegs = new RegistersView(this);
mGeneralRegs = new TraceRegisters(this);
//disasm
ui->mTopLeftUpperRightFrameLayout->addWidget(mTraceWidget);
//registers
@ -31,6 +31,7 @@ TraceWidget::TraceWidget(QWidget* parent) :
button_changeview->setStyleSheet("Text-align:left;padding: 4px;padding-left: 10px;");
connect(button_changeview, SIGNAL(clicked()), mGeneralRegs, SLOT(onChangeFPUViewAction()));
connect(mTraceWidget, SIGNAL(updateTraceRegistersView(void*)), this, SLOT(updateTraceRegistersView(void*)));
connect(Bridge::getBridge(), SIGNAL(updateTraceBrowser()), this, SLOT(updateSlot()));
mGeneralRegs->SetChangeButton(button_changeview);
@ -62,6 +63,11 @@ void TraceWidget::updateTraceRegistersView(void* registers)
mGeneralRegs->setRegisters((REGDUMP*)registers);
}
void TraceWidget::updateSlot()
{
mGeneralRegs->setActive(mTraceWidget->isFileOpened());
}
TraceBrowser* TraceWidget::getTraceBrowser()
{
return mTraceWidget;

View File

@ -5,7 +5,7 @@
class QVBoxLayout;
class CPUWidget;
class RegistersView;
class TraceRegisters;
class TraceBrowser;
class CPUInfoBox;
class StdTable;
@ -27,10 +27,11 @@ public:
protected slots:
void updateTraceRegistersView(void* registers);
void updateSlot();
protected:
TraceBrowser* mTraceWidget;
RegistersView* mGeneralRegs;
TraceRegisters* mGeneralRegs;
CPUInfoBox* mInfo;
StdTable* mOverview;

View File

@ -75,6 +75,7 @@ RESOURCES += \
SOURCES += \
Src/Gui/CPURegistersView.cpp \
Src/Tracer/TraceRegisters.cpp \
Src/Tracer/TraceWidget.cpp \
Src/main.cpp \
Src/Gui/MainWindow.cpp \
@ -191,6 +192,7 @@ SOURCES += \
HEADERS += \
Src/Gui/CPURegistersView.h \
Src/Tracer/TraceRegisters.h \
Src/Tracer/TraceWidget.h \
Src/main.h \
Src/Gui/MainWindow.h \