Debugger: Watch - Added edit in mem viewer + view in disassembly shortcuts
This commit is contained in:
parent
0b7660a3fa
commit
be2cd9a850
4 changed files with 121 additions and 11 deletions
|
@ -51,6 +51,11 @@ namespace Mesen.GUI.Config
|
|||
[ShortcutName("Mark Selection as Unidentified Code/Data")]
|
||||
public XmlKeys MarkAsUnidentified = Keys.Control | Keys.D3;
|
||||
|
||||
[ShortcutName("Edit in Memory Viewer")]
|
||||
public XmlKeys CodeWindow_EditInMemoryViewer = Keys.F1;
|
||||
[ShortcutName("View in disassembly")]
|
||||
public XmlKeys MemoryViewer_ViewInDisassembly = Keys.None;
|
||||
|
||||
[ShortcutName("Open APU Viewer")]
|
||||
public XmlKeys OpenApuViewer = Keys.Control | Keys.U;
|
||||
[ShortcutName("Open Assembler")]
|
||||
|
@ -119,8 +124,6 @@ namespace Mesen.GUI.Config
|
|||
public XmlKeys CodeWindow_EditSubroutine = Keys.F4;
|
||||
[ShortcutName("Code Window: Edit Selected Code")]
|
||||
public XmlKeys CodeWindow_EditSelectedCode = Keys.None;
|
||||
[ShortcutName("Code Window: Edit in Memory Viewer")]
|
||||
public XmlKeys CodeWindow_EditInMemoryViewer = Keys.F1;
|
||||
[ShortcutName("Code Window: Edit Label")]
|
||||
public XmlKeys CodeWindow_EditLabel = Keys.F2;
|
||||
[ShortcutName("Code Window: Navigate Back")]
|
||||
|
@ -198,8 +201,6 @@ namespace Mesen.GUI.Config
|
|||
public XmlKeys MemoryViewer_ViewInCpuMemory = Keys.None;
|
||||
[ShortcutName("View in [memory type]")]
|
||||
public XmlKeys MemoryViewer_ViewInMemoryType = Keys.None;
|
||||
[ShortcutName("View in disassembly")]
|
||||
public XmlKeys MemoryViewer_ViewInDisassembly = Keys.None;
|
||||
|
||||
//Script Window
|
||||
[ShortcutName("Open Script")]
|
||||
|
|
39
GUI.NET/Debugger/Controls/ctrlWatch.Designer.cs
generated
39
GUI.NET/Debugger/Controls/ctrlWatch.Designer.cs
generated
|
@ -36,6 +36,9 @@
|
|||
this.contextMenuWatch = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.mnuRemoveWatch = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuEditInMemoryViewer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuViewInDisassembly = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuHexDisplay = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.contextMenuWatch.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
|
@ -79,22 +82,47 @@
|
|||
this.contextMenuWatch.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuRemoveWatch,
|
||||
this.toolStripMenuItem1,
|
||||
this.mnuEditInMemoryViewer,
|
||||
this.mnuViewInDisassembly,
|
||||
this.toolStripMenuItem2,
|
||||
this.mnuHexDisplay});
|
||||
this.contextMenuWatch.Name = "contextMenuWatch";
|
||||
this.contextMenuWatch.Size = new System.Drawing.Size(184, 54);
|
||||
this.contextMenuWatch.Size = new System.Drawing.Size(194, 126);
|
||||
this.contextMenuWatch.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuWatch_Opening);
|
||||
//
|
||||
// mnuRemoveWatch
|
||||
//
|
||||
this.mnuRemoveWatch.Image = global::Mesen.GUI.Properties.Resources.Close;
|
||||
this.mnuRemoveWatch.Name = "mnuRemoveWatch";
|
||||
this.mnuRemoveWatch.Size = new System.Drawing.Size(183, 22);
|
||||
this.mnuRemoveWatch.Size = new System.Drawing.Size(193, 22);
|
||||
this.mnuRemoveWatch.Text = "Remove";
|
||||
this.mnuRemoveWatch.Click += new System.EventHandler(this.mnuRemoveWatch_Click);
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(180, 6);
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(190, 6);
|
||||
//
|
||||
// mnuEditInMemoryViewer
|
||||
//
|
||||
this.mnuEditInMemoryViewer.Image = global::Mesen.GUI.Properties.Resources.CheatCode;
|
||||
this.mnuEditInMemoryViewer.Name = "mnuEditInMemoryViewer";
|
||||
this.mnuEditInMemoryViewer.Size = new System.Drawing.Size(193, 22);
|
||||
this.mnuEditInMemoryViewer.Text = "Edit in Memory Viewer";
|
||||
this.mnuEditInMemoryViewer.Click += new System.EventHandler(this.mnuEditInMemoryViewer_Click);
|
||||
//
|
||||
// mnuViewInDisassembly
|
||||
//
|
||||
this.mnuViewInDisassembly.Image = global::Mesen.GUI.Properties.Resources.Bug;
|
||||
this.mnuViewInDisassembly.Name = "mnuViewInDisassembly";
|
||||
this.mnuViewInDisassembly.Size = new System.Drawing.Size(193, 22);
|
||||
this.mnuViewInDisassembly.Text = "View in disassembly";
|
||||
this.mnuViewInDisassembly.Click += new System.EventHandler(this.mnuViewInDisassembly_Click);
|
||||
//
|
||||
// toolStripMenuItem2
|
||||
//
|
||||
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
|
||||
this.toolStripMenuItem2.Size = new System.Drawing.Size(190, 6);
|
||||
//
|
||||
// mnuHexDisplay
|
||||
//
|
||||
|
@ -102,7 +130,7 @@
|
|||
this.mnuHexDisplay.CheckOnClick = true;
|
||||
this.mnuHexDisplay.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.mnuHexDisplay.Name = "mnuHexDisplay";
|
||||
this.mnuHexDisplay.Size = new System.Drawing.Size(183, 22);
|
||||
this.mnuHexDisplay.Size = new System.Drawing.Size(193, 22);
|
||||
this.mnuHexDisplay.Text = "Hexadecimal Display";
|
||||
this.mnuHexDisplay.Click += new System.EventHandler(this.mnuHexDisplay_Click);
|
||||
//
|
||||
|
@ -127,5 +155,8 @@
|
|||
private System.Windows.Forms.ToolStripMenuItem mnuRemoveWatch;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuHexDisplay;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuEditInMemoryViewer;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuViewInDisassembly;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,13 +9,19 @@ using System.Threading.Tasks;
|
|||
using System.Windows.Forms;
|
||||
using Mesen.GUI.Config;
|
||||
using Mesen.GUI.Controls;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Globalization;
|
||||
|
||||
namespace Mesen.GUI.Debugger
|
||||
{
|
||||
public partial class ctrlWatch : BaseControl
|
||||
{
|
||||
private static Regex _watchAddressOrLabel = new Regex(@"^(\[|{)(\s*((\$[0-9A-Fa-f]+)|(\d+)|([@_a-zA-Z0-9]+)))\s*[,]{0,1}\d*\s*(\]|})$", RegexOptions.Compiled);
|
||||
|
||||
private int _currentSelection = -1;
|
||||
private int _previousMaxLength = -1;
|
||||
private int _selectedAddress = -1;
|
||||
private CodeLabel _selectedLabel = null;
|
||||
|
||||
public ctrlWatch()
|
||||
{
|
||||
|
@ -31,9 +37,22 @@ namespace Mesen.GUI.Debugger
|
|||
this.mnuHexDisplay.Checked = ConfigManager.Config.DebugInfo.HexDisplay;
|
||||
WatchManager.WatchChanged += WatchManager_WatchChanged;
|
||||
mnuRemoveWatch.InitShortcut(this, nameof(DebuggerShortcutsConfig.WatchList_Delete));
|
||||
mnuEditInMemoryViewer.InitShortcut(this, nameof(DebuggerShortcutsConfig.CodeWindow_EditInMemoryViewer));
|
||||
mnuViewInDisassembly.InitShortcut(this, nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInDisassembly));
|
||||
}
|
||||
}
|
||||
|
||||
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
|
||||
{
|
||||
UpdateActions();
|
||||
return base.ProcessCmdKey(ref msg, keyData);
|
||||
}
|
||||
|
||||
private void contextMenuWatch_Opening(object sender, CancelEventArgs e)
|
||||
{
|
||||
UpdateActions();
|
||||
}
|
||||
|
||||
private void WatchManager_WatchChanged(object sender, EventArgs e)
|
||||
{
|
||||
if(this.InvokeRequired) {
|
||||
|
@ -120,6 +139,36 @@ namespace Mesen.GUI.Debugger
|
|||
private void lstWatch_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
mnuRemoveWatch.Enabled = lstWatch.SelectedItems.Count >= 1;
|
||||
UpdateActions();
|
||||
}
|
||||
|
||||
private void UpdateActions()
|
||||
{
|
||||
mnuEditInMemoryViewer.Enabled = false;
|
||||
mnuViewInDisassembly.Enabled = false;
|
||||
|
||||
if(lstWatch.SelectedItems.Count == 1) {
|
||||
Match match = _watchAddressOrLabel.Match(lstWatch.SelectedItems[0].Text);
|
||||
if(match.Success) {
|
||||
string address = match.Groups[3].Value;
|
||||
|
||||
if(address[0] >= '0' && address[0] <= '9' || address[0] == '$') {
|
||||
//CPU Address
|
||||
_selectedAddress = Int32.Parse(address[0] == '$' ? address.Substring(1) : address, address[0] == '$' ? NumberStyles.AllowHexSpecifier : NumberStyles.None);
|
||||
_selectedLabel = null;
|
||||
mnuEditInMemoryViewer.Enabled = true;
|
||||
mnuViewInDisassembly.Enabled = true;
|
||||
} else {
|
||||
//Label
|
||||
_selectedAddress = -1;
|
||||
_selectedLabel = LabelManager.GetLabel(address);
|
||||
if(_selectedLabel != null) {
|
||||
mnuEditInMemoryViewer.Enabled = true;
|
||||
mnuViewInDisassembly.Enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void lstWatch_Click(object sender, EventArgs e)
|
||||
|
@ -149,5 +198,34 @@ namespace Mesen.GUI.Debugger
|
|||
WatchManager.RemoveWatch(itemsToRemove.ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
private void mnuViewInDisassembly_Click(object sender, EventArgs e)
|
||||
{
|
||||
if(lstWatch.SelectedItems.Count != 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(_selectedAddress >= 0) {
|
||||
DebugWindowManager.GetDebugger().ScrollToAddress(_selectedAddress);
|
||||
} else if(_selectedLabel != null) {
|
||||
int relAddress = _selectedLabel.GetRelativeAddress();
|
||||
if(relAddress >= 0) {
|
||||
DebugWindowManager.GetDebugger().ScrollToAddress(relAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void mnuEditInMemoryViewer_Click(object sender, EventArgs e)
|
||||
{
|
||||
if(lstWatch.SelectedItems.Count != 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(_selectedAddress >= 0) {
|
||||
DebugWindowManager.OpenMemoryViewer(_selectedAddress, DebugMemoryType.CpuMemory);
|
||||
} else if(_selectedLabel != null) {
|
||||
DebugWindowManager.OpenMemoryViewer((int)_selectedLabel.Address, _selectedLabel.AddressType.ToMemoryType());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,6 +36,8 @@ namespace Mesen.GUI.Debugger
|
|||
GetMember(nameof(DebuggerShortcutsConfig.MarkAsCode)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MarkAsData)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MarkAsUnidentified)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditInMemoryViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInDisassembly)),
|
||||
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenApuViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenAssembler)),
|
||||
|
@ -57,8 +59,7 @@ namespace Mesen.GUI.Debugger
|
|||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Import)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Export)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInCpuMemory)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInMemoryType)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInDisassembly))
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInMemoryType))
|
||||
};
|
||||
|
||||
ctrlDbgShortcutsScriptWindow.Shortcuts = new FieldInfo[] {
|
||||
|
@ -88,7 +89,6 @@ namespace Mesen.GUI.Debugger
|
|||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_SetNextStatement)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSubroutine)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSelectedCode)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditInMemoryViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditLabel)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_NavigateBack)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_NavigateForward)),
|
||||
|
|
Loading…
Add table
Reference in a new issue