Added a navigate backwards/forwards line history to Qt debugger assembly view.
This commit is contained in:
parent
086163e062
commit
0a367374da
|
@ -340,6 +340,26 @@ QMenuBar *ConsoleDebugger::buildMenuBar(void)
|
||||||
|
|
||||||
viewMenu->addSeparator();
|
viewMenu->addSeparator();
|
||||||
|
|
||||||
|
// View -> Navigate Back
|
||||||
|
act = new QAction(tr("Navigate &Back"), this);
|
||||||
|
act->setShortcut( QKeySequence(tr("Ctrl+Left") ));
|
||||||
|
act->setStatusTip(tr("Navigate Back"));
|
||||||
|
//act->setIcon( QIcon(":icons/JumpTarget.png") );
|
||||||
|
connect(act, SIGNAL(triggered()), this, SLOT(navHistBackCB(void)) );
|
||||||
|
|
||||||
|
viewMenu->addAction(act);
|
||||||
|
|
||||||
|
// View -> Navigate Forward
|
||||||
|
act = new QAction(tr("Navigate &Forward"), this);
|
||||||
|
act->setShortcut( QKeySequence(tr("Ctrl+Right") ));
|
||||||
|
act->setStatusTip(tr("Navigate Forward"));
|
||||||
|
//act->setIcon( QIcon(":icons/JumpTarget.png") );
|
||||||
|
connect(act, SIGNAL(triggered()), this, SLOT(navHistForwardCB(void)) );
|
||||||
|
|
||||||
|
viewMenu->addAction(act);
|
||||||
|
|
||||||
|
viewMenu->addSeparator();
|
||||||
|
|
||||||
// View -> CPU Status
|
// View -> CPU Status
|
||||||
visMenu = viewMenu->addMenu( tr("&CPU Status") );
|
visMenu = viewMenu->addMenu( tr("&CPU Status") );
|
||||||
|
|
||||||
|
@ -2559,6 +2579,16 @@ void ConsoleDebugger::debugRunLine128CB(void)
|
||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
void ConsoleDebugger::navHistBackCB (void)
|
||||||
|
{
|
||||||
|
asmView->navHistBack();
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void ConsoleDebugger::navHistForwardCB (void)
|
||||||
|
{
|
||||||
|
asmView->navHistForward();
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
void ConsoleDebugger::seekPCCB (void)
|
void ConsoleDebugger::seekPCCB (void)
|
||||||
{
|
{
|
||||||
if (FCEUI_EmulationPaused())
|
if (FCEUI_EmulationPaused())
|
||||||
|
@ -2674,14 +2704,11 @@ void ConsoleDebugger::openGotoAddrDialog(void)
|
||||||
|
|
||||||
if ( QDialog::Accepted == ret )
|
if ( QDialog::Accepted == ret )
|
||||||
{
|
{
|
||||||
int addr, line;
|
int addr;
|
||||||
|
|
||||||
addr = sbox->value();
|
addr = sbox->value();
|
||||||
|
|
||||||
line = asmView->getAsmLineFromAddr(addr);
|
asmView->gotoAddr(addr);
|
||||||
|
|
||||||
asmView->setLine( line );
|
|
||||||
vbar->setValue( line );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -2704,16 +2731,7 @@ void ConsoleDebugger::asmViewCtxMenuRunToCursor(void)
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void ConsoleDebugger::asmViewCtxMenuGoTo(void)
|
void ConsoleDebugger::asmViewCtxMenuGoTo(void)
|
||||||
{
|
{
|
||||||
int line;
|
asmView->gotoAddr( asmView->getCtxMenuAddr() );
|
||||||
|
|
||||||
line = asmView->getAsmLineFromAddr( asmView->getCtxMenuAddr() );
|
|
||||||
|
|
||||||
asmView->scrollToLine( line );
|
|
||||||
|
|
||||||
if ( asmView->getAsmAddrFromLine(line) == asmView->getCtxMenuAddr() )
|
|
||||||
{
|
|
||||||
asmView->setSelAddrToLine(line);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void ConsoleDebugger::asmViewCtxMenuAddBP(void)
|
void ConsoleDebugger::asmViewCtxMenuAddBP(void)
|
||||||
|
@ -3016,6 +3034,12 @@ int QAsmView::getAsmLineFromAddr(int addr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't stop on an symbol name or comment line, search for next assembly line
|
||||||
|
while ( (line < asmEntry.size()) && (asmEntry[line]->type != dbg_asm_entry_t::ASM_TEXT) )
|
||||||
|
{
|
||||||
|
line++;
|
||||||
|
}
|
||||||
|
|
||||||
//for (size_t i=0; i<asmEntry.size(); i++)
|
//for (size_t i=0; i<asmEntry.size(); i++)
|
||||||
//{
|
//{
|
||||||
// if ( asmEntry[i]->addr >= addr )
|
// if ( asmEntry[i]->addr >= addr )
|
||||||
|
@ -4289,10 +4313,21 @@ void QAsmView::scrollToPC(void)
|
||||||
{
|
{
|
||||||
if ( asmPC != NULL )
|
if ( asmPC != NULL )
|
||||||
{
|
{
|
||||||
|
curNavLoc.addr = asmPC->addr;
|
||||||
|
|
||||||
scrollToLine( asmPC->line );
|
scrollToLine( asmPC->line );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
void QAsmView::scrollToAddr( int addr )
|
||||||
|
{
|
||||||
|
int line = getAsmLineFromAddr(addr);
|
||||||
|
|
||||||
|
curNavLoc.addr = asmPC->addr;
|
||||||
|
|
||||||
|
scrollToLine( line );
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
void QAsmView::scrollToLine( int line )
|
void QAsmView::scrollToLine( int line )
|
||||||
{
|
{
|
||||||
int ofs = 0;
|
int ofs = 0;
|
||||||
|
@ -4344,6 +4379,88 @@ void QAsmView::scrollToLine( int line )
|
||||||
vbar->setValue( lineOffset );
|
vbar->setValue( lineOffset );
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
void QAsmView::gotoPC(void)
|
||||||
|
{
|
||||||
|
if ( asmPC != NULL )
|
||||||
|
{
|
||||||
|
gotoLine( asmPC->line );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void QAsmView::gotoAddr( int addr )
|
||||||
|
{
|
||||||
|
int line = getAsmLineFromAddr(addr);
|
||||||
|
|
||||||
|
gotoLine( line );
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void QAsmView::gotoLine( int line )
|
||||||
|
{
|
||||||
|
if ( (line >= 0) && (line < asmEntry.size()) )
|
||||||
|
{
|
||||||
|
if ( curNavLoc.addr != asmEntry[line]->addr )
|
||||||
|
{ // Don't push back to back duplicates into the navigation history
|
||||||
|
pushAddrHist();
|
||||||
|
}
|
||||||
|
curNavLoc.addr = asmEntry[line]->addr;
|
||||||
|
|
||||||
|
scrollToLine( line );
|
||||||
|
|
||||||
|
setSelAddrToLine(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void QAsmView::pushAddrHist(void)
|
||||||
|
{
|
||||||
|
if ( navBckHist.size() > 0)
|
||||||
|
{
|
||||||
|
if ( navBckHist.back().addr == curNavLoc.addr )
|
||||||
|
{
|
||||||
|
//printf("Address is Same\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
navBckHist.push_back(curNavLoc);
|
||||||
|
|
||||||
|
navFwdHist.clear();
|
||||||
|
|
||||||
|
//printf("Push Address: $%04X %zi\n", curNavLoc.addr, navBckHist.size() );
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void QAsmView::navHistBack(void)
|
||||||
|
{
|
||||||
|
if ( navBckHist.size() > 0)
|
||||||
|
{
|
||||||
|
navFwdHist.push_back(curNavLoc);
|
||||||
|
|
||||||
|
curNavLoc = navBckHist.back();
|
||||||
|
|
||||||
|
navBckHist.pop_back();
|
||||||
|
|
||||||
|
int line = getAsmLineFromAddr( curNavLoc.addr );
|
||||||
|
|
||||||
|
scrollToLine( line );
|
||||||
|
setSelAddrToLine( line );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void QAsmView::navHistForward(void)
|
||||||
|
{
|
||||||
|
if ( navFwdHist.size() > 0 )
|
||||||
|
{
|
||||||
|
navBckHist.push_back(curNavLoc);
|
||||||
|
|
||||||
|
curNavLoc = navFwdHist.back();
|
||||||
|
|
||||||
|
navFwdHist.pop_back();
|
||||||
|
|
||||||
|
int line = getAsmLineFromAddr( curNavLoc.addr );
|
||||||
|
|
||||||
|
scrollToLine( line );
|
||||||
|
setSelAddrToLine( line );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
void QAsmView::setSelAddrToLine( int line )
|
void QAsmView::setSelAddrToLine( int line )
|
||||||
{
|
{
|
||||||
if ( (line >= 0) && (line < asmEntry.size()) )
|
if ( (line >= 0) && (line < asmEntry.size()) )
|
||||||
|
@ -4354,7 +4471,17 @@ void QAsmView::setSelAddrToLine( int line )
|
||||||
selAddrWidth = 4;
|
selAddrWidth = 4;
|
||||||
selAddrValue = addr;
|
selAddrValue = addr;
|
||||||
sprintf( selAddrText, "%04X", addr );
|
sprintf( selAddrText, "%04X", addr );
|
||||||
printf("Set Select ADDR:%04X\n", addr);
|
|
||||||
|
parent->setBookmarkSelectedAddress( addr );
|
||||||
|
|
||||||
|
//printf("Selected ADDR: $%04X '%s' '%s'\n", addr, selAddrText, asmEntry[line]->text.c_str() );
|
||||||
|
|
||||||
|
txtHlgtAnchorLine = -1;
|
||||||
|
txtHlgtAnchorChar = -1;
|
||||||
|
txtHlgtStartChar = -1;
|
||||||
|
txtHlgtStartLine = -1;
|
||||||
|
txtHlgtEndChar = -1;
|
||||||
|
txtHlgtEndLine = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -4956,16 +5083,7 @@ void QAsmView::mouseDoubleClickEvent(QMouseEvent * event)
|
||||||
|
|
||||||
if ( selAddrValue >= 0 )
|
if ( selAddrValue >= 0 )
|
||||||
{
|
{
|
||||||
int line;
|
gotoAddr( selAddrValue );
|
||||||
|
|
||||||
line = getAsmLineFromAddr(selAddrValue);
|
|
||||||
|
|
||||||
scrollToLine( line );
|
|
||||||
|
|
||||||
if ( getAsmAddrFromLine(line) == selAddrValue )
|
|
||||||
{
|
|
||||||
setSelAddrToLine(line);
|
|
||||||
}
|
|
||||||
|
|
||||||
mouseLeftBtnDown = false;
|
mouseLeftBtnDown = false;
|
||||||
txtHlgtAnchorLine = -1;
|
txtHlgtAnchorLine = -1;
|
||||||
|
|
|
@ -64,6 +64,16 @@ struct dbg_asm_entry_t
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct dbg_nav_entry_t
|
||||||
|
{
|
||||||
|
int addr;
|
||||||
|
|
||||||
|
dbg_nav_entry_t(void)
|
||||||
|
{
|
||||||
|
addr = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class debuggerBookmark_t
|
class debuggerBookmark_t
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -115,6 +125,10 @@ class QAsmView : public QWidget
|
||||||
void setXScroll(int value);
|
void setXScroll(int value);
|
||||||
void scrollToPC(void);
|
void scrollToPC(void);
|
||||||
void scrollToLine( int line );
|
void scrollToLine( int line );
|
||||||
|
void scrollToAddr( int addr );
|
||||||
|
void gotoLine( int line );
|
||||||
|
void gotoAddr( int addr );
|
||||||
|
void gotoPC(void);
|
||||||
void setSelAddrToLine( int line );
|
void setSelAddrToLine( int line );
|
||||||
void setDisplayROMoffsets( bool value );
|
void setDisplayROMoffsets( bool value );
|
||||||
void setSymbolDebugEnable( bool value );
|
void setSymbolDebugEnable( bool value );
|
||||||
|
@ -128,6 +142,9 @@ class QAsmView : public QWidget
|
||||||
int isBreakpointAtAddr( int addr );
|
int isBreakpointAtAddr( int addr );
|
||||||
void determineLineBreakpoints(void);
|
void determineLineBreakpoints(void);
|
||||||
void setFont( const QFont &font );
|
void setFont( const QFont &font );
|
||||||
|
void pushAddrHist(void);
|
||||||
|
void navHistBack(void);
|
||||||
|
void navHistForward(void);
|
||||||
|
|
||||||
QColor opcodeColor;
|
QColor opcodeColor;
|
||||||
QColor addressColor;
|
QColor addressColor;
|
||||||
|
@ -171,6 +188,10 @@ class QAsmView : public QWidget
|
||||||
QScrollBar *hbar;
|
QScrollBar *hbar;
|
||||||
QClipboard *clipboard;
|
QClipboard *clipboard;
|
||||||
|
|
||||||
|
std::vector <dbg_nav_entry_t> navBckHist;
|
||||||
|
std::vector <dbg_nav_entry_t> navFwdHist;
|
||||||
|
dbg_nav_entry_t curNavLoc;
|
||||||
|
|
||||||
int ctxMenuAddr;
|
int ctxMenuAddr;
|
||||||
int maxLineLen;
|
int maxLineLen;
|
||||||
int pxCharWidth;
|
int pxCharWidth;
|
||||||
|
@ -440,6 +461,8 @@ class ConsoleDebugger : public QDialog
|
||||||
void changeAsmFontCB(void);
|
void changeAsmFontCB(void);
|
||||||
void changeStackFontCB(void);
|
void changeStackFontCB(void);
|
||||||
void changeCpuFontCB(void);
|
void changeCpuFontCB(void);
|
||||||
|
void navHistBackCB(void);
|
||||||
|
void navHistForwardCB(void);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue