|
|
|
@ -239,6 +239,39 @@ void DebuggerWindow::onCodeViewItemActivated(QModelIndex index)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void DebuggerWindow::onCodeViewContextMenuRequested(const QPoint& pt)
|
|
|
|
|
{
|
|
|
|
|
const QModelIndex index = m_ui.codeView->indexAt(pt);
|
|
|
|
|
if (!index.isValid())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
const VirtualMemoryAddress address = m_code_model->getAddressForIndex(index);
|
|
|
|
|
|
|
|
|
|
QMenu menu;
|
|
|
|
|
menu.addAction(QStringLiteral("0x%1").arg(static_cast<uint>(address), 8, 16, QChar('0')))->setEnabled(false);
|
|
|
|
|
menu.addSeparator();
|
|
|
|
|
|
|
|
|
|
QAction* action = menu.addAction(QIcon(":/icons/media-record@2x.png"), tr("Toggle &Breakpoint"));
|
|
|
|
|
connect(action, &QAction::triggered, this, [this, address]() { toggleBreakpoint(address); });
|
|
|
|
|
|
|
|
|
|
action = menu.addAction(QIcon(":/icons/debug-run-cursor.png"), tr("&Run To Cursor"));
|
|
|
|
|
connect(action, &QAction::triggered, this, [address]() {
|
|
|
|
|
Host::RunOnCPUThread([address]() {
|
|
|
|
|
CPU::AddBreakpoint(address, true, true);
|
|
|
|
|
g_emu_thread->setSystemPaused(false);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
menu.addSeparator();
|
|
|
|
|
action = menu.addAction(QIcon(":/icons/antialias-icon.png"), tr("View in &Dump"));
|
|
|
|
|
connect(action, &QAction::triggered, this, [this, address]() { scrollToMemoryAddress(address); });
|
|
|
|
|
|
|
|
|
|
action = menu.addAction(QIcon(":/icons/debug-trace.png"), tr("Follow Load/Store"));
|
|
|
|
|
connect(action, &QAction::triggered, this, [this, address]() { tryFollowLoadStore(address); });
|
|
|
|
|
|
|
|
|
|
menu.exec(m_ui.codeView->mapToGlobal(pt));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void DebuggerWindow::onMemorySearchTriggered()
|
|
|
|
|
{
|
|
|
|
|
m_ui.memoryView->clearHighlightRange();
|
|
|
|
@ -380,6 +413,8 @@ void DebuggerWindow::setupAdditionalUi()
|
|
|
|
|
m_ui.memoryView->setFont(fixedFont);
|
|
|
|
|
m_ui.stackView->setFont(fixedFont);
|
|
|
|
|
|
|
|
|
|
m_ui.codeView->setContextMenuPolicy(Qt::CustomContextMenu);
|
|
|
|
|
|
|
|
|
|
setCentralWidget(nullptr);
|
|
|
|
|
delete m_ui.centralwidget;
|
|
|
|
|
}
|
|
|
|
@ -405,6 +440,7 @@ void DebuggerWindow::connectSignals()
|
|
|
|
|
connect(m_ui.actionClearBreakpoints, &QAction::triggered, this, &DebuggerWindow::onClearBreakpointsTriggered);
|
|
|
|
|
connect(m_ui.actionClose, &QAction::triggered, this, &DebuggerWindow::close);
|
|
|
|
|
connect(m_ui.codeView, &QTreeView::activated, this, &DebuggerWindow::onCodeViewItemActivated);
|
|
|
|
|
connect(m_ui.codeView, &QTreeView::customContextMenuRequested, this, &DebuggerWindow::onCodeViewContextMenuRequested);
|
|
|
|
|
|
|
|
|
|
connect(m_ui.memoryRegionRAM, &QRadioButton::clicked, [this]() { setMemoryViewRegion(Bus::MemoryRegion::RAM); });
|
|
|
|
|
connect(m_ui.memoryRegionEXP1, &QRadioButton::clicked, [this]() { setMemoryViewRegion(Bus::MemoryRegion::EXP1); });
|
|
|
|
|