Debugger: Add disassembler toggle to go to the PC address on pause

This commit is contained in:
chaoticgd 2025-01-09 00:47:49 +00:00 committed by Ty
parent 7381a02dae
commit d34f2ec142
3 changed files with 15 additions and 1 deletions

View File

@ -336,7 +336,7 @@ void CpuWidget::onVMPaused()
} }
else else
{ {
m_ui.disassemblyWidget->gotoAddress(m_cpu.getPC(), false); m_ui.disassemblyWidget->gotoProgramCounterOnPause();
} }
reloadCPUWidgets(); reloadCPUWidgets();

View File

@ -656,6 +656,12 @@ void DisassemblyWidget::customMenuRequested(QPoint pos)
connect(action, &QAction::triggered, this, &DisassemblyWidget::contextGoToAddress); connect(action, &QAction::triggered, this, &DisassemblyWidget::contextGoToAddress);
contextMenu->addAction(action = new QAction(tr("Go to in Memory View"), this)); contextMenu->addAction(action = new QAction(tr("Go to in Memory View"), this));
connect(action, &QAction::triggered, this, [this]() { gotoInMemory(m_selectedAddressStart); }); connect(action, &QAction::triggered, this, [this]() { gotoInMemory(m_selectedAddressStart); });
contextMenu->addAction(action = new QAction(tr("Go to PC on Pause"), this));
action->setCheckable(true);
action->setChecked(m_goToProgramCounterOnPause);
connect(action, &QAction::triggered, this, [this](bool value) { m_goToProgramCounterOnPause = value; });
contextMenu->addSeparator(); contextMenu->addSeparator();
contextMenu->addAction(action = new QAction(tr("Add Function"), this)); contextMenu->addAction(action = new QAction(tr("Add Function"), this));
connect(action, &QAction::triggered, this, &DisassemblyWidget::contextAddFunction); connect(action, &QAction::triggered, this, &DisassemblyWidget::contextAddFunction);
@ -822,6 +828,12 @@ void DisassemblyWidget::gotoAddressAndSetFocus(u32 address)
gotoAddress(address, true); gotoAddress(address, true);
} }
void DisassemblyWidget::gotoProgramCounterOnPause()
{
if (m_goToProgramCounterOnPause)
gotoAddress(m_cpu->getPC(), false);
}
void DisassemblyWidget::gotoAddress(u32 address, bool should_set_focus) void DisassemblyWidget::gotoAddress(u32 address, bool should_set_focus)
{ {
const u32 destAddress = address & ~3; const u32 destAddress = address & ~3;

View File

@ -59,6 +59,7 @@ public slots:
void contextShowOpcode(); void contextShowOpcode();
void gotoAddressAndSetFocus(u32 address); void gotoAddressAndSetFocus(u32 address);
void gotoProgramCounterOnPause();
void gotoAddress(u32 address, bool should_set_focus); void gotoAddress(u32 address, bool should_set_focus);
void setDemangle(bool demangle) { m_demangleFunctions = demangle; }; void setDemangle(bool demangle) { m_demangleFunctions = demangle; };
@ -82,6 +83,7 @@ private:
bool m_demangleFunctions = true; bool m_demangleFunctions = true;
bool m_showInstructionOpcode = true; bool m_showInstructionOpcode = true;
bool m_goToProgramCounterOnPause = true;
DisassemblyManager m_disassemblyManager; DisassemblyManager m_disassemblyManager;
inline QString DisassemblyStringFromAddress(u32 address, QFont font, u32 pc, bool selected); inline QString DisassemblyStringFromAddress(u32 address, QFont font, u32 pc, bool selected);