Debugger: Added break on uninitialized memory read option (only active when debugger is opened at power cycle/reset)
This commit is contained in:
parent
1ad1cb8d73
commit
d31336f291
5 changed files with 59 additions and 45 deletions
|
@ -221,7 +221,8 @@ enum class BreakSource
|
|||
BreakOnBrk = 3,
|
||||
BreakOnCop = 4,
|
||||
BreakOnWdm = 5,
|
||||
BreakOnStp = 6
|
||||
BreakOnStp = 6,
|
||||
BreakOnUninitMemoryRead = 7
|
||||
};
|
||||
|
||||
struct BreakEvent
|
||||
|
|
|
@ -67,6 +67,11 @@ Debugger::Debugger(shared_ptr<Console> console)
|
|||
_breakRequestCount = 0;
|
||||
_suspendRequestCount = 0;
|
||||
|
||||
if(_cpu->GetState().PC == 0) {
|
||||
//Enable breaking on uninit reads when debugger is opened at power on
|
||||
_enableBreakOnUninitRead = true;
|
||||
}
|
||||
|
||||
string cdlFile = FolderUtilities::CombinePath(FolderUtilities::GetDebuggerFolder(), FolderUtilities::GetFilename(_cart->GetRomInfo().RomFile.GetFileName(), false) + ".cdl");
|
||||
_codeDataLogger->LoadCdlFile(cdlFile);
|
||||
|
||||
|
@ -90,6 +95,7 @@ void Debugger::Release()
|
|||
|
||||
void Debugger::Reset()
|
||||
{
|
||||
_enableBreakOnUninitRead = true;
|
||||
_prevOpCode = 0xFF;
|
||||
_spcPrevOpCode = 0xFF;
|
||||
}
|
||||
|
@ -167,7 +173,13 @@ void Debugger::ProcessCpuRead(uint32_t addr, uint8_t value, MemoryOperationType
|
|||
}
|
||||
}
|
||||
|
||||
_memoryAccessCounter->ProcessMemoryAccess(addressInfo, type, _memoryManager->GetMasterClock());
|
||||
if(_memoryAccessCounter->ProcessMemoryAccess(addressInfo, type, _memoryManager->GetMasterClock())) {
|
||||
//Memory access was a read on an uninitialized memory address
|
||||
if(_enableBreakOnUninitRead && _settings->CheckDebuggerFlag(DebuggerFlags::BreakOnUninitRead)) {
|
||||
breakSource = BreakSource::BreakOnUninitMemoryRead;
|
||||
_cpuStepCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(_memoryManager->IsRegister(addr)) {
|
||||
_eventManager->AddEvent(DebugEventType::Register, operation);
|
||||
|
|
|
@ -66,6 +66,8 @@ private:
|
|||
atomic<int32_t> _spcBreakAddress;
|
||||
atomic<int32_t> _breakScanline;
|
||||
|
||||
bool _enableBreakOnUninitRead = false;
|
||||
|
||||
uint8_t _prevOpCode = 0xFF;
|
||||
uint32_t _prevProgramCounter = 0;
|
||||
|
||||
|
|
82
UI/Debugger/frmDebugger.Designer.cs
generated
82
UI/Debugger/frmDebugger.Designer.cs
generated
|
@ -36,6 +36,11 @@
|
|||
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importExportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuDbgIntegrationSettings = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem7 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.codeDataLoggerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuResetCdlLog = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuExit = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuContinue = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBreak = new System.Windows.Forms.ToolStripMenuItem();
|
||||
|
@ -122,11 +127,6 @@
|
|||
this.grpCallstack = new System.Windows.Forms.GroupBox();
|
||||
this.ctrlCallstack = new Mesen.GUI.Debugger.Controls.ctrlCallstack();
|
||||
this.tsToolbar = new Mesen.GUI.Controls.ctrlMesenToolStrip();
|
||||
this.toolStripMenuItem7 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuExit = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.codeDataLoggerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuResetCdlLog = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.ctrlMesenMenuStrip1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.ctrlSplitContainer)).BeginInit();
|
||||
this.ctrlSplitContainer.Panel1.SuspendLayout();
|
||||
|
@ -190,6 +190,41 @@
|
|||
this.mnuDbgIntegrationSettings.Text = "CC65/CA65 Integration Settings";
|
||||
this.mnuDbgIntegrationSettings.Click += new System.EventHandler(this.mnuDbgIntegrationSettings_Click);
|
||||
//
|
||||
// toolStripMenuItem7
|
||||
//
|
||||
this.toolStripMenuItem7.Name = "toolStripMenuItem7";
|
||||
this.toolStripMenuItem7.Size = new System.Drawing.Size(168, 6);
|
||||
//
|
||||
// codeDataLoggerToolStripMenuItem
|
||||
//
|
||||
this.codeDataLoggerToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuResetCdlLog});
|
||||
this.codeDataLoggerToolStripMenuItem.Image = global::Mesen.GUI.Properties.Resources.VerifiedData;
|
||||
this.codeDataLoggerToolStripMenuItem.Name = "codeDataLoggerToolStripMenuItem";
|
||||
this.codeDataLoggerToolStripMenuItem.Size = new System.Drawing.Size(171, 22);
|
||||
this.codeDataLoggerToolStripMenuItem.Text = "Code/Data Logger";
|
||||
//
|
||||
// mnuResetCdlLog
|
||||
//
|
||||
this.mnuResetCdlLog.Image = global::Mesen.GUI.Properties.Resources.Refresh;
|
||||
this.mnuResetCdlLog.Name = "mnuResetCdlLog";
|
||||
this.mnuResetCdlLog.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuResetCdlLog.Text = "Reset log";
|
||||
this.mnuResetCdlLog.Click += new System.EventHandler(this.mnuResetCdlLog_Click);
|
||||
//
|
||||
// toolStripMenuItem13
|
||||
//
|
||||
this.toolStripMenuItem13.Name = "toolStripMenuItem13";
|
||||
this.toolStripMenuItem13.Size = new System.Drawing.Size(168, 6);
|
||||
//
|
||||
// mnuExit
|
||||
//
|
||||
this.mnuExit.Image = global::Mesen.GUI.Properties.Resources.Exit;
|
||||
this.mnuExit.Name = "mnuExit";
|
||||
this.mnuExit.Size = new System.Drawing.Size(171, 22);
|
||||
this.mnuExit.Text = "Exit";
|
||||
this.mnuExit.Click += new System.EventHandler(this.mnuExit_Click);
|
||||
//
|
||||
// debugToolStripMenuItem
|
||||
//
|
||||
this.debugToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
|
@ -625,14 +660,12 @@
|
|||
//
|
||||
this.toolStripMenuItem11.Name = "toolStripMenuItem11";
|
||||
this.toolStripMenuItem11.Size = new System.Drawing.Size(258, 6);
|
||||
this.toolStripMenuItem11.Visible = false;
|
||||
//
|
||||
// mnuBreakOnUnitRead
|
||||
//
|
||||
this.mnuBreakOnUnitRead.Name = "mnuBreakOnUnitRead";
|
||||
this.mnuBreakOnUnitRead.Size = new System.Drawing.Size(261, 22);
|
||||
this.mnuBreakOnUnitRead.Text = "Break on uninitialized memory read";
|
||||
this.mnuBreakOnUnitRead.Visible = false;
|
||||
//
|
||||
// toolStripMenuItem10
|
||||
//
|
||||
|
@ -883,41 +916,6 @@
|
|||
this.tsToolbar.TabIndex = 3;
|
||||
this.tsToolbar.Text = "ctrlMesenToolStrip1";
|
||||
//
|
||||
// toolStripMenuItem7
|
||||
//
|
||||
this.toolStripMenuItem7.Name = "toolStripMenuItem7";
|
||||
this.toolStripMenuItem7.Size = new System.Drawing.Size(168, 6);
|
||||
//
|
||||
// mnuExit
|
||||
//
|
||||
this.mnuExit.Image = global::Mesen.GUI.Properties.Resources.Exit;
|
||||
this.mnuExit.Name = "mnuExit";
|
||||
this.mnuExit.Size = new System.Drawing.Size(171, 22);
|
||||
this.mnuExit.Text = "Exit";
|
||||
this.mnuExit.Click += new System.EventHandler(this.mnuExit_Click);
|
||||
//
|
||||
// toolStripMenuItem13
|
||||
//
|
||||
this.toolStripMenuItem13.Name = "toolStripMenuItem13";
|
||||
this.toolStripMenuItem13.Size = new System.Drawing.Size(168, 6);
|
||||
//
|
||||
// codeDataLoggerToolStripMenuItem
|
||||
//
|
||||
this.codeDataLoggerToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuResetCdlLog});
|
||||
this.codeDataLoggerToolStripMenuItem.Image = global::Mesen.GUI.Properties.Resources.VerifiedData;
|
||||
this.codeDataLoggerToolStripMenuItem.Name = "codeDataLoggerToolStripMenuItem";
|
||||
this.codeDataLoggerToolStripMenuItem.Size = new System.Drawing.Size(171, 22);
|
||||
this.codeDataLoggerToolStripMenuItem.Text = "Code/Data Logger";
|
||||
//
|
||||
// mnuResetCdlLog
|
||||
//
|
||||
this.mnuResetCdlLog.Image = global::Mesen.GUI.Properties.Resources.Refresh;
|
||||
this.mnuResetCdlLog.Name = "mnuResetCdlLog";
|
||||
this.mnuResetCdlLog.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuResetCdlLog.Text = "Reset log";
|
||||
this.mnuResetCdlLog.Click += new System.EventHandler(this.mnuResetCdlLog_Click);
|
||||
//
|
||||
// frmDebugger
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
|
|
|
@ -634,7 +634,8 @@ namespace Mesen.GUI
|
|||
BreakOnBrk = 3,
|
||||
BreakOnCop = 4,
|
||||
BreakOnWdm = 5,
|
||||
BreakOnStp = 6
|
||||
BreakOnStp = 6,
|
||||
BreakOnUninitMemoryRead = 7
|
||||
}
|
||||
|
||||
public struct BreakEvent
|
||||
|
|
Loading…
Add table
Reference in a new issue