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,
|
BreakOnBrk = 3,
|
||||||
BreakOnCop = 4,
|
BreakOnCop = 4,
|
||||||
BreakOnWdm = 5,
|
BreakOnWdm = 5,
|
||||||
BreakOnStp = 6
|
BreakOnStp = 6,
|
||||||
|
BreakOnUninitMemoryRead = 7
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BreakEvent
|
struct BreakEvent
|
||||||
|
|
|
@ -67,6 +67,11 @@ Debugger::Debugger(shared_ptr<Console> console)
|
||||||
_breakRequestCount = 0;
|
_breakRequestCount = 0;
|
||||||
_suspendRequestCount = 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");
|
string cdlFile = FolderUtilities::CombinePath(FolderUtilities::GetDebuggerFolder(), FolderUtilities::GetFilename(_cart->GetRomInfo().RomFile.GetFileName(), false) + ".cdl");
|
||||||
_codeDataLogger->LoadCdlFile(cdlFile);
|
_codeDataLogger->LoadCdlFile(cdlFile);
|
||||||
|
|
||||||
|
@ -90,6 +95,7 @@ void Debugger::Release()
|
||||||
|
|
||||||
void Debugger::Reset()
|
void Debugger::Reset()
|
||||||
{
|
{
|
||||||
|
_enableBreakOnUninitRead = true;
|
||||||
_prevOpCode = 0xFF;
|
_prevOpCode = 0xFF;
|
||||||
_spcPrevOpCode = 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)) {
|
if(_memoryManager->IsRegister(addr)) {
|
||||||
_eventManager->AddEvent(DebugEventType::Register, operation);
|
_eventManager->AddEvent(DebugEventType::Register, operation);
|
||||||
|
|
|
@ -66,6 +66,8 @@ private:
|
||||||
atomic<int32_t> _spcBreakAddress;
|
atomic<int32_t> _spcBreakAddress;
|
||||||
atomic<int32_t> _breakScanline;
|
atomic<int32_t> _breakScanline;
|
||||||
|
|
||||||
|
bool _enableBreakOnUninitRead = false;
|
||||||
|
|
||||||
uint8_t _prevOpCode = 0xFF;
|
uint8_t _prevOpCode = 0xFF;
|
||||||
uint32_t _prevProgramCounter = 0;
|
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.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.importExportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.importExportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.mnuDbgIntegrationSettings = 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.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.mnuContinue = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuContinue = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.mnuBreak = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuBreak = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
@ -122,11 +127,6 @@
|
||||||
this.grpCallstack = new System.Windows.Forms.GroupBox();
|
this.grpCallstack = new System.Windows.Forms.GroupBox();
|
||||||
this.ctrlCallstack = new Mesen.GUI.Debugger.Controls.ctrlCallstack();
|
this.ctrlCallstack = new Mesen.GUI.Debugger.Controls.ctrlCallstack();
|
||||||
this.tsToolbar = new Mesen.GUI.Controls.ctrlMesenToolStrip();
|
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();
|
this.ctrlMesenMenuStrip1.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.ctrlSplitContainer)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.ctrlSplitContainer)).BeginInit();
|
||||||
this.ctrlSplitContainer.Panel1.SuspendLayout();
|
this.ctrlSplitContainer.Panel1.SuspendLayout();
|
||||||
|
@ -190,6 +190,41 @@
|
||||||
this.mnuDbgIntegrationSettings.Text = "CC65/CA65 Integration Settings";
|
this.mnuDbgIntegrationSettings.Text = "CC65/CA65 Integration Settings";
|
||||||
this.mnuDbgIntegrationSettings.Click += new System.EventHandler(this.mnuDbgIntegrationSettings_Click);
|
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
|
// debugToolStripMenuItem
|
||||||
//
|
//
|
||||||
this.debugToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.debugToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
@ -625,14 +660,12 @@
|
||||||
//
|
//
|
||||||
this.toolStripMenuItem11.Name = "toolStripMenuItem11";
|
this.toolStripMenuItem11.Name = "toolStripMenuItem11";
|
||||||
this.toolStripMenuItem11.Size = new System.Drawing.Size(258, 6);
|
this.toolStripMenuItem11.Size = new System.Drawing.Size(258, 6);
|
||||||
this.toolStripMenuItem11.Visible = false;
|
|
||||||
//
|
//
|
||||||
// mnuBreakOnUnitRead
|
// mnuBreakOnUnitRead
|
||||||
//
|
//
|
||||||
this.mnuBreakOnUnitRead.Name = "mnuBreakOnUnitRead";
|
this.mnuBreakOnUnitRead.Name = "mnuBreakOnUnitRead";
|
||||||
this.mnuBreakOnUnitRead.Size = new System.Drawing.Size(261, 22);
|
this.mnuBreakOnUnitRead.Size = new System.Drawing.Size(261, 22);
|
||||||
this.mnuBreakOnUnitRead.Text = "Break on uninitialized memory read";
|
this.mnuBreakOnUnitRead.Text = "Break on uninitialized memory read";
|
||||||
this.mnuBreakOnUnitRead.Visible = false;
|
|
||||||
//
|
//
|
||||||
// toolStripMenuItem10
|
// toolStripMenuItem10
|
||||||
//
|
//
|
||||||
|
@ -883,41 +916,6 @@
|
||||||
this.tsToolbar.TabIndex = 3;
|
this.tsToolbar.TabIndex = 3;
|
||||||
this.tsToolbar.Text = "ctrlMesenToolStrip1";
|
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
|
// frmDebugger
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
|
|
@ -634,7 +634,8 @@ namespace Mesen.GUI
|
||||||
BreakOnBrk = 3,
|
BreakOnBrk = 3,
|
||||||
BreakOnCop = 4,
|
BreakOnCop = 4,
|
||||||
BreakOnWdm = 5,
|
BreakOnWdm = 5,
|
||||||
BreakOnStp = 6
|
BreakOnStp = 6,
|
||||||
|
BreakOnUninitMemoryRead = 7
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct BreakEvent
|
public struct BreakEvent
|
||||||
|
|
Loading…
Add table
Reference in a new issue