Support for different debug sessions using MDI child forms

This commit is contained in:
x1nixmzeng 2020-10-11 12:16:22 +01:00
parent 96155736e5
commit e01b863fd2
9 changed files with 5638 additions and 323 deletions

View File

@ -40,6 +40,10 @@ file (GLOB SOURCES
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.cs"
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.Designer.cs"
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.resx"
"${CXBXR_DEBUGGER_SRC_DIR}/IDebugWindow.cs"
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.cs"
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.Designer.cs"
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.resx"
"${CXBXR_DEBUGGER_SRC_DIR}/PatchManager.cs"
"${CXBXR_DEBUGGER_SRC_DIR}/Program.cs"
"${CXBXR_DEBUGGER_SRC_DIR}/Resources/BreakpointDisable_16x_24.bmp"
@ -100,6 +104,9 @@ csharp_set_windows_forms_properties(
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.Designer.cs"
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.cs"
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.resx"
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.Designer.cs"
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.cs"
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.resx"
)
csharp_set_designer_cs_properties(

View File

@ -0,0 +1,227 @@
namespace CxbxDebugger
{
partial class CxbxDebuggerMain
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CxbxDebuggerMain));
this.menuStrip = new System.Windows.Forms.MenuStrip();
this.fileMenu = new System.Windows.Forms.ToolStripMenuItem();
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.startDebuggingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
this.suspendToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.resumeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.windowsMenu = new System.Windows.Forms.ToolStripMenuItem();
this.cascadeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.tileVerticalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.tileHorizontalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.arrangeIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.statusStrip = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
this.menuStrip.SuspendLayout();
this.statusStrip.SuspendLayout();
this.SuspendLayout();
//
// menuStrip
//
this.menuStrip.ImageScalingSize = new System.Drawing.Size(24, 24);
this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileMenu,
this.debugToolStripMenuItem,
this.windowsMenu});
this.menuStrip.Location = new System.Drawing.Point(0, 0);
this.menuStrip.MdiWindowListItem = this.windowsMenu;
this.menuStrip.Name = "menuStrip";
this.menuStrip.Padding = new System.Windows.Forms.Padding(4, 1, 0, 1);
this.menuStrip.Size = new System.Drawing.Size(1281, 24);
this.menuStrip.TabIndex = 0;
this.menuStrip.Text = "MenuStrip";
//
// fileMenu
//
this.fileMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.exitToolStripMenuItem});
this.fileMenu.ImageTransparentColor = System.Drawing.SystemColors.ActiveBorder;
this.fileMenu.Name = "fileMenu";
this.fileMenu.Size = new System.Drawing.Size(37, 22);
this.fileMenu.Text = "&File";
//
// exitToolStripMenuItem
//
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
this.exitToolStripMenuItem.ShortcutKeyDisplayString = "Alt+F4";
this.exitToolStripMenuItem.Size = new System.Drawing.Size(135, 22);
this.exitToolStripMenuItem.Text = "E&xit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolsStripMenuItem_Click);
//
// debugToolStripMenuItem
//
this.debugToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.startDebuggingToolStripMenuItem,
this.toolStripMenuItem1,
this.suspendToolStripMenuItem,
this.resumeToolStripMenuItem});
this.debugToolStripMenuItem.Name = "debugToolStripMenuItem";
this.debugToolStripMenuItem.Size = new System.Drawing.Size(54, 22);
this.debugToolStripMenuItem.Text = "Debug";
//
// startDebuggingToolStripMenuItem
//
this.startDebuggingToolStripMenuItem.Image = global::CxbxDebugger.Properties.Resources.run;
this.startDebuggingToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta;
this.startDebuggingToolStripMenuItem.Name = "startDebuggingToolStripMenuItem";
this.startDebuggingToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
this.startDebuggingToolStripMenuItem.Text = "&Start Debugging";
this.startDebuggingToolStripMenuItem.Click += new System.EventHandler(this.startDebuggingToolStripMenuItem_Click);
//
// toolStripMenuItem1
//
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
this.toolStripMenuItem1.Size = new System.Drawing.Size(157, 6);
//
// suspendToolStripMenuItem
//
this.suspendToolStripMenuItem.Image = global::CxbxDebugger.Properties.Resources.pause;
this.suspendToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta;
this.suspendToolStripMenuItem.Name = "suspendToolStripMenuItem";
this.suspendToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
this.suspendToolStripMenuItem.Text = "&Suspend";
this.suspendToolStripMenuItem.Click += new System.EventHandler(this.suspendToolStripMenuItem_Click);
//
// resumeToolStripMenuItem
//
this.resumeToolStripMenuItem.Image = global::CxbxDebugger.Properties.Resources.run;
this.resumeToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta;
this.resumeToolStripMenuItem.Name = "resumeToolStripMenuItem";
this.resumeToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
this.resumeToolStripMenuItem.Text = "&Resume";
this.resumeToolStripMenuItem.Click += new System.EventHandler(this.resumeToolStripMenuItem_Click);
//
// windowsMenu
//
this.windowsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.cascadeToolStripMenuItem,
this.tileVerticalToolStripMenuItem,
this.tileHorizontalToolStripMenuItem,
this.arrangeIconsToolStripMenuItem});
this.windowsMenu.Name = "windowsMenu";
this.windowsMenu.Size = new System.Drawing.Size(68, 22);
this.windowsMenu.Text = "&Windows";
//
// cascadeToolStripMenuItem
//
this.cascadeToolStripMenuItem.Name = "cascadeToolStripMenuItem";
this.cascadeToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.cascadeToolStripMenuItem.Text = "&Cascade";
this.cascadeToolStripMenuItem.Click += new System.EventHandler(this.CascadeToolStripMenuItem_Click);
//
// tileVerticalToolStripMenuItem
//
this.tileVerticalToolStripMenuItem.Name = "tileVerticalToolStripMenuItem";
this.tileVerticalToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.tileVerticalToolStripMenuItem.Text = "Tile &Vertical";
this.tileVerticalToolStripMenuItem.Click += new System.EventHandler(this.TileVerticalToolStripMenuItem_Click);
//
// tileHorizontalToolStripMenuItem
//
this.tileHorizontalToolStripMenuItem.Name = "tileHorizontalToolStripMenuItem";
this.tileHorizontalToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.tileHorizontalToolStripMenuItem.Text = "Tile &Horizontal";
this.tileHorizontalToolStripMenuItem.Click += new System.EventHandler(this.TileHorizontalToolStripMenuItem_Click);
//
// arrangeIconsToolStripMenuItem
//
this.arrangeIconsToolStripMenuItem.Name = "arrangeIconsToolStripMenuItem";
this.arrangeIconsToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.arrangeIconsToolStripMenuItem.Text = "&Arrange Icons";
this.arrangeIconsToolStripMenuItem.Click += new System.EventHandler(this.ArrangeIconsToolStripMenuItem_Click);
//
// statusStrip
//
this.statusStrip.ImageScalingSize = new System.Drawing.Size(24, 24);
this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabel});
this.statusStrip.Location = new System.Drawing.Point(0, 545);
this.statusStrip.Name = "statusStrip";
this.statusStrip.Size = new System.Drawing.Size(1281, 22);
this.statusStrip.TabIndex = 2;
this.statusStrip.Text = "StatusStrip";
//
// toolStripStatusLabel
//
this.toolStripStatusLabel.Name = "toolStripStatusLabel";
this.toolStripStatusLabel.Size = new System.Drawing.Size(39, 17);
this.toolStripStatusLabel.Text = "Status";
//
// CxbxDebuggerMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.ClientSize = new System.Drawing.Size(1281, 567);
this.Controls.Add(this.statusStrip);
this.Controls.Add(this.menuStrip);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.IsMdiContainer = true;
this.MainMenuStrip = this.menuStrip;
this.Name = "CxbxDebuggerMain";
this.Text = "cxbx-debugger";
this.menuStrip.ResumeLayout(false);
this.menuStrip.PerformLayout();
this.statusStrip.ResumeLayout(false);
this.statusStrip.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.MenuStrip menuStrip;
private System.Windows.Forms.StatusStrip statusStrip;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel;
private System.Windows.Forms.ToolStripMenuItem tileHorizontalToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem fileMenu;
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem windowsMenu;
private System.Windows.Forms.ToolStripMenuItem cascadeToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem tileVerticalToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem arrangeIconsToolStripMenuItem;
private System.Windows.Forms.ToolTip toolTip;
private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem startDebuggingToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem suspendToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem resumeToolStripMenuItem;
}
}

View File

@ -0,0 +1,109 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CxbxDebugger
{
public partial class CxbxDebuggerMain : Form, IDebugContainerWindow
{
public CxbxDebuggerMain(string[] args)
{
InitializeComponent();
var StartupArgs = new string[args.Length - 1];
Array.Copy(args, 1, StartupArgs, 0, args.Length - 1);
// Setup session without initially running the game
AddDebugSession(StartupArgs, false);
}
private void ExitToolsStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void CascadeToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.Cascade);
}
private void TileVerticalToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileVertical);
}
private void TileHorizontalToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileHorizontal);
}
private void ArrangeIconsToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.ArrangeIcons);
}
private void startDebuggingToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form childForm in MdiChildren)
{
if (childForm is IDebugWindow)
{
(childForm as IDebugWindow).StartSession();
}
}
}
private void suspendToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form childForm in MdiChildren)
{
if (childForm is IDebugWindow)
{
(childForm as IDebugWindow).SuspendSession();
}
}
}
private void resumeToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form childForm in MdiChildren)
{
if (childForm is IDebugWindow)
{
(childForm as IDebugWindow).ResumeSession();
}
}
}
public void AddDebugSession(string[] Arguments, bool StartAutomatically)
{
var SessionWindow = CreateNewSessionWindow(Arguments);
if (StartAutomatically)
{
SessionWindow.StartSession();
}
}
public void ReportGameTitle(string GameTitle)
{
Text = $"cxbx-debugger ({GameTitle})";
}
private IDebugWindow CreateNewSessionWindow(string[] Arguments)
{
Form childForm = new Form1(Arguments);
childForm.MdiParent = this;
childForm.WindowState = FormWindowState.Maximized;
childForm.Show();
return childForm as IDebugWindow;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -29,21 +29,13 @@
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.lbConsole = new System.Windows.Forms.ListBox();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.btnStart = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.btnSuspend = new System.Windows.Forms.ToolStripButton();
this.btnResume = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();
this.cbThreads = new System.Windows.Forms.ToolStripComboBox();
this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();
this.cbFrames = new System.Windows.Forms.ToolStripComboBox();
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
this.statusBar = new System.Windows.Forms.StatusStrip();
this.lblStatus = new System.Windows.Forms.ToolStripStatusLabel();
this.tabContainer = new System.Windows.Forms.TabControl();
this.tabSummary = new System.Windows.Forms.TabPage();
this.linkLabel3 = new System.Windows.Forms.LinkLabel();
this.linkLabel2 = new System.Windows.Forms.LinkLabel();
this.linkLabel1 = new System.Windows.Forms.LinkLabel();
this.label9 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.tabDisassembly = new System.Windows.Forms.TabPage();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.btnToMemory = new System.Windows.Forms.Button();
@ -112,10 +104,8 @@
this.lbDebug = new System.Windows.Forms.ListBox();
this.diagSaveMemory = new System.Windows.Forms.SaveFileDialog();
this.diagBrowseCT = new System.Windows.Forms.OpenFileDialog();
this.toolStrip1.SuspendLayout();
this.tableLayoutPanel3.SuspendLayout();
this.statusBar.SuspendLayout();
this.tabContainer.SuspendLayout();
this.tabSummary.SuspendLayout();
this.tabDisassembly.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
@ -154,135 +144,9 @@
this.splitContainer5.SuspendLayout();
this.SuspendLayout();
//
// lbConsole
//
this.lbConsole.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbConsole.FormattingEnabled = true;
this.lbConsole.Location = new System.Drawing.Point(3, 231);
this.lbConsole.Name = "lbConsole";
this.lbConsole.ScrollAlwaysVisible = true;
this.lbConsole.Size = new System.Drawing.Size(728, 51);
this.lbConsole.TabIndex = 2;
//
// toolStrip1
//
this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.btnStart,
this.toolStripSeparator1,
this.btnSuspend,
this.btnResume,
this.toolStripSeparator2,
this.toolStripLabel1,
this.cbThreads,
this.toolStripLabel2,
this.cbFrames});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
this.toolStrip1.Size = new System.Drawing.Size(734, 25);
this.toolStrip1.TabIndex = 7;
this.toolStrip1.Text = "toolStrip1";
//
// btnStart
//
this.btnStart.Image = global::CxbxDebugger.Properties.Resources.run;
this.btnStart.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btnStart.Name = "btnStart";
this.btnStart.Size = new System.Drawing.Size(51, 22);
this.btnStart.Text = "Start";
this.btnStart.Click += new System.EventHandler(this.toolStripButton1_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
//
// btnSuspend
//
this.btnSuspend.Image = global::CxbxDebugger.Properties.Resources.pause;
this.btnSuspend.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btnSuspend.Name = "btnSuspend";
this.btnSuspend.Size = new System.Drawing.Size(72, 22);
this.btnSuspend.Text = "Suspend";
this.btnSuspend.Click += new System.EventHandler(this.toolStripButton2_Click);
//
// btnResume
//
this.btnResume.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.btnResume.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btnResume.Name = "btnResume";
this.btnResume.Size = new System.Drawing.Size(53, 22);
this.btnResume.Text = "Resume";
this.btnResume.Click += new System.EventHandler(this.toolStripButton3_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
//
// toolStripLabel1
//
this.toolStripLabel1.Name = "toolStripLabel1";
this.toolStripLabel1.Size = new System.Drawing.Size(47, 22);
this.toolStripLabel1.Text = "Thread:";
//
// cbThreads
//
this.cbThreads.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbThreads.Name = "cbThreads";
this.cbThreads.Size = new System.Drawing.Size(200, 25);
this.cbThreads.SelectedIndexChanged += new System.EventHandler(this.cbThreads_SelectedIndexChanged);
//
// toolStripLabel2
//
this.toolStripLabel2.Name = "toolStripLabel2";
this.toolStripLabel2.Size = new System.Drawing.Size(74, 22);
this.toolStripLabel2.Text = "Stack Frame:";
//
// cbFrames
//
this.cbFrames.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbFrames.Name = "cbFrames";
this.cbFrames.Size = new System.Drawing.Size(200, 25);
this.cbFrames.SelectedIndexChanged += new System.EventHandler(this.cbFrames_SelectedIndexChanged);
//
// tableLayoutPanel3
//
this.tableLayoutPanel3.ColumnCount = 1;
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel3.Controls.Add(this.statusBar, 0, 2);
this.tableLayoutPanel3.Controls.Add(this.tabContainer, 0, 0);
this.tableLayoutPanel3.Controls.Add(this.lbConsole, 0, 1);
this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 25);
this.tableLayoutPanel3.Name = "tableLayoutPanel3";
this.tableLayoutPanel3.RowCount = 3;
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 80F));
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel3.Size = new System.Drawing.Size(734, 306);
this.tableLayoutPanel3.TabIndex = 9;
//
// statusBar
//
this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill;
this.statusBar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.lblStatus});
this.statusBar.Location = new System.Drawing.Point(0, 285);
this.statusBar.Name = "statusBar";
this.statusBar.Size = new System.Drawing.Size(734, 21);
this.statusBar.TabIndex = 10;
this.statusBar.Text = "statusStrip1";
//
// lblStatus
//
this.lblStatus.Name = "lblStatus";
this.lblStatus.Size = new System.Drawing.Size(39, 16);
this.lblStatus.Text = "Ready";
//
// tabContainer
//
this.tabContainer.Controls.Add(this.tabSummary);
this.tabContainer.Controls.Add(this.tabDisassembly);
this.tabContainer.Controls.Add(this.tabBreakpoints);
this.tabContainer.Controls.Add(this.tabWatch);
@ -290,20 +154,86 @@
this.tabContainer.Controls.Add(this.tabTweaks);
this.tabContainer.Controls.Add(this.tabOutput);
this.tabContainer.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabContainer.Location = new System.Drawing.Point(3, 3);
this.tabContainer.Location = new System.Drawing.Point(0, 0);
this.tabContainer.Multiline = true;
this.tabContainer.Name = "tabContainer";
this.tabContainer.SelectedIndex = 0;
this.tabContainer.Size = new System.Drawing.Size(728, 222);
this.tabContainer.Size = new System.Drawing.Size(734, 331);
this.tabContainer.TabIndex = 3;
//
// tabSummary
//
this.tabSummary.Controls.Add(this.linkLabel3);
this.tabSummary.Controls.Add(this.linkLabel2);
this.tabSummary.Controls.Add(this.linkLabel1);
this.tabSummary.Controls.Add(this.label9);
this.tabSummary.Controls.Add(this.label7);
this.tabSummary.Location = new System.Drawing.Point(4, 22);
this.tabSummary.Name = "tabSummary";
this.tabSummary.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
this.tabSummary.Size = new System.Drawing.Size(726, 305);
this.tabSummary.TabIndex = 6;
this.tabSummary.Text = "Summary";
this.tabSummary.UseVisualStyleBackColor = true;
//
// linkLabel3
//
this.linkLabel3.AutoSize = true;
this.linkLabel3.Location = new System.Drawing.Point(8, 109);
this.linkLabel3.Name = "linkLabel3";
this.linkLabel3.Size = new System.Drawing.Size(89, 13);
this.linkLabel3.TabIndex = 5;
this.linkLabel3.TabStop = true;
this.linkLabel3.Text = "View disassembly";
this.linkLabel3.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel3_LinkClicked);
//
// linkLabel2
//
this.linkLabel2.AutoSize = true;
this.linkLabel2.Location = new System.Drawing.Point(8, 82);
this.linkLabel2.Name = "linkLabel2";
this.linkLabel2.Size = new System.Drawing.Size(69, 13);
this.linkLabel2.TabIndex = 4;
this.linkLabel2.TabStop = true;
this.linkLabel2.Text = "View memory";
this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel2_LinkClicked);
//
// linkLabel1
//
this.linkLabel1.AutoSize = true;
this.linkLabel1.Location = new System.Drawing.Point(8, 57);
this.linkLabel1.Name = "linkLabel1";
this.linkLabel1.Size = new System.Drawing.Size(95, 13);
this.linkLabel1.TabIndex = 3;
this.linkLabel1.TabStop = true;
this.linkLabel1.Text = "View file resources";
this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(6, 32);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(376, 13);
this.label9.TabIndex = 1;
this.label9.Text = "To run with the debugger, select Debug->Start Debugging from the main menu";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(8, 3);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(155, 13);
this.label7.TabIndex = 0;
this.label7.Text = "Welcome to the cxbx-debugger";
//
// tabDisassembly
//
this.tabDisassembly.Controls.Add(this.splitContainer2);
this.tabDisassembly.Location = new System.Drawing.Point(4, 22);
this.tabDisassembly.Name = "tabDisassembly";
this.tabDisassembly.Padding = new System.Windows.Forms.Padding(3);
this.tabDisassembly.Size = new System.Drawing.Size(720, 196);
this.tabDisassembly.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
this.tabDisassembly.Size = new System.Drawing.Size(726, 305);
this.tabDisassembly.TabIndex = 0;
this.tabDisassembly.Text = "Disassembly";
this.tabDisassembly.UseVisualStyleBackColor = true;
@ -329,14 +259,14 @@
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.txDisassembly);
this.splitContainer2.Size = new System.Drawing.Size(714, 190);
this.splitContainer2.Size = new System.Drawing.Size(720, 299);
this.splitContainer2.SplitterDistance = 34;
this.splitContainer2.TabIndex = 2;
//
// btnToMemory
//
this.btnToMemory.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnToMemory.Location = new System.Drawing.Point(452, 3);
this.btnToMemory.Location = new System.Drawing.Point(458, 3);
this.btnToMemory.Name = "btnToMemory";
this.btnToMemory.Size = new System.Drawing.Size(119, 23);
this.btnToMemory.TabIndex = 4;
@ -347,7 +277,7 @@
// btnNext
//
this.btnNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnNext.Location = new System.Drawing.Point(647, 3);
this.btnNext.Location = new System.Drawing.Point(654, 3);
this.btnNext.Name = "btnNext";
this.btnNext.Size = new System.Drawing.Size(64, 23);
this.btnNext.TabIndex = 3;
@ -358,7 +288,7 @@
// btnPrev
//
this.btnPrev.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnPrev.Location = new System.Drawing.Point(577, 3);
this.btnPrev.Location = new System.Drawing.Point(584, 3);
this.btnPrev.Name = "btnPrev";
this.btnPrev.Size = new System.Drawing.Size(64, 23);
this.btnPrev.TabIndex = 2;
@ -369,7 +299,7 @@
// btnGo
//
this.btnGo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnGo.Location = new System.Drawing.Point(327, 3);
this.btnGo.Location = new System.Drawing.Point(334, 3);
this.btnGo.Name = "btnGo";
this.btnGo.Size = new System.Drawing.Size(119, 23);
this.btnGo.TabIndex = 1;
@ -393,7 +323,7 @@
this.cbDisAddr.FormattingEnabled = true;
this.cbDisAddr.Location = new System.Drawing.Point(132, 5);
this.cbDisAddr.Name = "cbDisAddr";
this.cbDisAddr.Size = new System.Drawing.Size(189, 21);
this.cbDisAddr.Size = new System.Drawing.Size(196, 21);
this.cbDisAddr.TabIndex = 0;
this.cbDisAddr.SelectedIndexChanged += new System.EventHandler(this.cbDisAddr_SelectedIndexChanged);
this.cbDisAddr.KeyDown += new System.Windows.Forms.KeyEventHandler(this.comboBox1_KeyDown);
@ -409,7 +339,7 @@
this.txDisassembly.Name = "txDisassembly";
this.txDisassembly.ReadOnly = true;
this.txDisassembly.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedVertical;
this.txDisassembly.Size = new System.Drawing.Size(714, 152);
this.txDisassembly.Size = new System.Drawing.Size(720, 261);
this.txDisassembly.TabIndex = 1;
this.txDisassembly.Text = "";
//
@ -418,8 +348,8 @@
this.tabBreakpoints.Controls.Add(this.splitContainer3);
this.tabBreakpoints.Location = new System.Drawing.Point(4, 22);
this.tabBreakpoints.Name = "tabBreakpoints";
this.tabBreakpoints.Padding = new System.Windows.Forms.Padding(3);
this.tabBreakpoints.Size = new System.Drawing.Size(720, 196);
this.tabBreakpoints.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
this.tabBreakpoints.Size = new System.Drawing.Size(726, 305);
this.tabBreakpoints.TabIndex = 1;
this.tabBreakpoints.Text = "Breakpoints";
this.tabBreakpoints.UseVisualStyleBackColor = true;
@ -438,7 +368,7 @@
// splitContainer3.Panel2
//
this.splitContainer3.Panel2.Controls.Add(this.clbBreakpoints);
this.splitContainer3.Size = new System.Drawing.Size(714, 190);
this.splitContainer3.Size = new System.Drawing.Size(720, 299);
this.splitContainer3.SplitterDistance = 237;
this.splitContainer3.TabIndex = 5;
//
@ -451,7 +381,7 @@
this.groupBox4.Controls.Add(this.cbBreakpointCxbx);
this.groupBox4.Location = new System.Drawing.Point(2, 112);
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size(233, 75);
this.groupBox4.Size = new System.Drawing.Size(233, 185);
this.groupBox4.TabIndex = 5;
this.groupBox4.TabStop = false;
this.groupBox4.Text = "Interrupts";
@ -489,7 +419,7 @@
this.groupBox1.Controls.Add(this.tbFilter);
this.groupBox1.Location = new System.Drawing.Point(0, 0);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(234, 106);
this.groupBox1.Size = new System.Drawing.Size(233, 106);
this.groupBox1.TabIndex = 4;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "File Watch";
@ -502,7 +432,7 @@
this.cbAction.FormattingEnabled = true;
this.cbAction.Location = new System.Drawing.Point(89, 45);
this.cbAction.Name = "cbAction";
this.cbAction.Size = new System.Drawing.Size(139, 21);
this.cbAction.Size = new System.Drawing.Size(137, 21);
this.cbAction.TabIndex = 6;
//
// label5
@ -529,7 +459,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.btnAddFileBp.Location = new System.Drawing.Point(89, 72);
this.btnAddFileBp.Name = "btnAddFileBp";
this.btnAddFileBp.Size = new System.Drawing.Size(139, 23);
this.btnAddFileBp.Size = new System.Drawing.Size(137, 23);
this.btnAddFileBp.TabIndex = 4;
this.btnAddFileBp.Text = "Add";
this.btnAddFileBp.UseVisualStyleBackColor = true;
@ -541,7 +471,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.tbFilter.Location = new System.Drawing.Point(89, 19);
this.tbFilter.Name = "tbFilter";
this.tbFilter.Size = new System.Drawing.Size(139, 20);
this.tbFilter.Size = new System.Drawing.Size(137, 20);
this.tbFilter.TabIndex = 2;
//
// clbBreakpoints
@ -550,7 +480,7 @@
this.clbBreakpoints.FormattingEnabled = true;
this.clbBreakpoints.Location = new System.Drawing.Point(0, 0);
this.clbBreakpoints.Name = "clbBreakpoints";
this.clbBreakpoints.Size = new System.Drawing.Size(473, 190);
this.clbBreakpoints.Size = new System.Drawing.Size(479, 299);
this.clbBreakpoints.TabIndex = 0;
this.clbBreakpoints.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.clbBreakpoints_ItemCheck);
this.clbBreakpoints.KeyDown += new System.Windows.Forms.KeyEventHandler(this.clbBreakpoints_KeyDown);
@ -560,8 +490,8 @@
this.tabWatch.Controls.Add(this.splitContainer1);
this.tabWatch.Location = new System.Drawing.Point(4, 22);
this.tabWatch.Name = "tabWatch";
this.tabWatch.Padding = new System.Windows.Forms.Padding(3);
this.tabWatch.Size = new System.Drawing.Size(720, 196);
this.tabWatch.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
this.tabWatch.Size = new System.Drawing.Size(726, 305);
this.tabWatch.TabIndex = 2;
this.tabWatch.Text = "File Watcher";
this.tabWatch.UseVisualStyleBackColor = true;
@ -579,8 +509,8 @@
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.lbOpenedFiles);
this.splitContainer1.Size = new System.Drawing.Size(714, 190);
this.splitContainer1.SplitterDistance = 501;
this.splitContainer1.Size = new System.Drawing.Size(720, 299);
this.splitContainer1.SplitterDistance = 503;
this.splitContainer1.TabIndex = 3;
//
// lvFileDetails
@ -595,7 +525,7 @@
this.lvFileDetails.Location = new System.Drawing.Point(0, 0);
this.lvFileDetails.MultiSelect = false;
this.lvFileDetails.Name = "lvFileDetails";
this.lvFileDetails.Size = new System.Drawing.Size(501, 190);
this.lvFileDetails.Size = new System.Drawing.Size(503, 299);
this.lvFileDetails.TabIndex = 2;
this.lvFileDetails.UseCompatibleStateImageBehavior = false;
this.lvFileDetails.View = System.Windows.Forms.View.Details;
@ -621,7 +551,7 @@
this.lbOpenedFiles.FormattingEnabled = true;
this.lbOpenedFiles.Location = new System.Drawing.Point(0, 0);
this.lbOpenedFiles.Name = "lbOpenedFiles";
this.lbOpenedFiles.Size = new System.Drawing.Size(209, 190);
this.lbOpenedFiles.Size = new System.Drawing.Size(213, 299);
this.lbOpenedFiles.TabIndex = 0;
//
// tabMemory
@ -629,8 +559,8 @@
this.tabMemory.Controls.Add(this.splitContainer4);
this.tabMemory.Location = new System.Drawing.Point(4, 22);
this.tabMemory.Name = "tabMemory";
this.tabMemory.Padding = new System.Windows.Forms.Padding(3);
this.tabMemory.Size = new System.Drawing.Size(720, 196);
this.tabMemory.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
this.tabMemory.Size = new System.Drawing.Size(726, 305);
this.tabMemory.TabIndex = 4;
this.tabMemory.Text = "Memory Viewer";
this.tabMemory.UseVisualStyleBackColor = true;
@ -648,8 +578,8 @@
// splitContainer4.Panel2
//
this.splitContainer4.Panel2.Controls.Add(this.groupBox2);
this.splitContainer4.Size = new System.Drawing.Size(714, 190);
this.splitContainer4.SplitterDistance = 376;
this.splitContainer4.Size = new System.Drawing.Size(720, 299);
this.splitContainer4.SplitterDistance = 378;
this.splitContainer4.TabIndex = 7;
//
// txMemoryDump
@ -663,7 +593,7 @@
this.txMemoryDump.Name = "txMemoryDump";
this.txMemoryDump.ReadOnly = true;
this.txMemoryDump.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txMemoryDump.Size = new System.Drawing.Size(376, 190);
this.txMemoryDump.Size = new System.Drawing.Size(378, 299);
this.txMemoryDump.TabIndex = 0;
//
// groupBox2
@ -681,7 +611,7 @@
this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox2.Location = new System.Drawing.Point(0, 0);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(334, 190);
this.groupBox2.Size = new System.Drawing.Size(338, 299);
this.groupBox2.TabIndex = 8;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "View or Dump Memory";
@ -692,7 +622,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.textBox2.Location = new System.Drawing.Point(213, 129);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(115, 20);
this.textBox2.Size = new System.Drawing.Size(118, 20);
this.textBox2.TabIndex = 10;
//
// label8
@ -712,7 +642,7 @@
this.cbDataFormat.FormattingEnabled = true;
this.cbDataFormat.Location = new System.Drawing.Point(88, 130);
this.cbDataFormat.Name = "cbDataFormat";
this.cbDataFormat.Size = new System.Drawing.Size(119, 21);
this.cbDataFormat.Size = new System.Drawing.Size(122, 21);
this.cbDataFormat.TabIndex = 8;
this.cbDataFormat.SelectionChangeCommitted += new System.EventHandler(this.cbDataFormat_SelectionChangeCommitted);
//
@ -722,7 +652,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.btnAddWatch.Location = new System.Drawing.Point(88, 157);
this.btnAddWatch.Name = "btnAddWatch";
this.btnAddWatch.Size = new System.Drawing.Size(240, 23);
this.btnAddWatch.Size = new System.Drawing.Size(243, 23);
this.btnAddWatch.TabIndex = 7;
this.btnAddWatch.Text = "Add to Editor...";
this.btnAddWatch.UseVisualStyleBackColor = true;
@ -743,7 +673,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.btnDumpMemory.Location = new System.Drawing.Point(88, 100);
this.btnDumpMemory.Name = "btnDumpMemory";
this.btnDumpMemory.Size = new System.Drawing.Size(240, 23);
this.btnDumpMemory.Size = new System.Drawing.Size(243, 23);
this.btnDumpMemory.TabIndex = 6;
this.btnDumpMemory.Text = "Dump Memory to File...";
this.btnDumpMemory.UseVisualStyleBackColor = true;
@ -755,7 +685,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.txAddress.Location = new System.Drawing.Point(88, 18);
this.txAddress.Name = "txAddress";
this.txAddress.Size = new System.Drawing.Size(240, 20);
this.txAddress.Size = new System.Drawing.Size(243, 20);
this.txAddress.TabIndex = 1;
//
// label2
@ -773,7 +703,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.btnReadMemory.Location = new System.Drawing.Point(88, 71);
this.btnReadMemory.Name = "btnReadMemory";
this.btnReadMemory.Size = new System.Drawing.Size(240, 23);
this.btnReadMemory.Size = new System.Drawing.Size(243, 23);
this.btnReadMemory.TabIndex = 2;
this.btnReadMemory.Text = "Read Memory";
this.btnReadMemory.UseVisualStyleBackColor = true;
@ -785,7 +715,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.txSize.Location = new System.Drawing.Point(88, 45);
this.txSize.Name = "txSize";
this.txSize.Size = new System.Drawing.Size(240, 20);
this.txSize.Size = new System.Drawing.Size(243, 20);
this.txSize.TabIndex = 3;
this.txSize.Text = "32";
//
@ -794,8 +724,8 @@
this.tabTweaks.Controls.Add(this.tabCEContainer);
this.tabTweaks.Location = new System.Drawing.Point(4, 22);
this.tabTweaks.Name = "tabTweaks";
this.tabTweaks.Padding = new System.Windows.Forms.Padding(3);
this.tabTweaks.Size = new System.Drawing.Size(720, 196);
this.tabTweaks.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
this.tabTweaks.Size = new System.Drawing.Size(726, 305);
this.tabTweaks.TabIndex = 5;
this.tabTweaks.Text = "Memory Editor";
this.tabTweaks.UseVisualStyleBackColor = true;
@ -808,7 +738,7 @@
this.tabCEContainer.Location = new System.Drawing.Point(3, 3);
this.tabCEContainer.Name = "tabCEContainer";
this.tabCEContainer.SelectedIndex = 0;
this.tabCEContainer.Size = new System.Drawing.Size(714, 190);
this.tabCEContainer.Size = new System.Drawing.Size(720, 299);
this.tabCEContainer.TabIndex = 5;
//
// tabSubData
@ -816,8 +746,8 @@
this.tabSubData.Controls.Add(this.splitContainer6);
this.tabSubData.Location = new System.Drawing.Point(4, 22);
this.tabSubData.Name = "tabSubData";
this.tabSubData.Padding = new System.Windows.Forms.Padding(3);
this.tabSubData.Size = new System.Drawing.Size(706, 164);
this.tabSubData.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
this.tabSubData.Size = new System.Drawing.Size(712, 273);
this.tabSubData.TabIndex = 0;
this.tabSubData.Text = "Edit Data";
this.tabSubData.UseVisualStyleBackColor = true;
@ -839,8 +769,8 @@
// splitContainer6.Panel2
//
this.splitContainer6.Panel2.Controls.Add(this.lvCEMemory);
this.splitContainer6.Size = new System.Drawing.Size(700, 158);
this.splitContainer6.SplitterDistance = 34;
this.splitContainer6.Size = new System.Drawing.Size(706, 267);
this.splitContainer6.SplitterDistance = 56;
this.splitContainer6.TabIndex = 2;
//
// btnRefresh
@ -866,7 +796,7 @@
// btnApply
//
this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnApply.Location = new System.Drawing.Point(574, 3);
this.btnApply.Location = new System.Drawing.Point(580, 3);
this.btnApply.Name = "btnApply";
this.btnApply.Size = new System.Drawing.Size(123, 23);
this.btnApply.TabIndex = 4;
@ -880,7 +810,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.txNewValue.Location = new System.Drawing.Point(261, 5);
this.txNewValue.Name = "txNewValue";
this.txNewValue.Size = new System.Drawing.Size(307, 20);
this.txNewValue.Size = new System.Drawing.Size(313, 20);
this.txNewValue.TabIndex = 2;
//
// lvCEMemory
@ -896,7 +826,7 @@
this.lvCEMemory.Location = new System.Drawing.Point(0, 0);
this.lvCEMemory.MultiSelect = false;
this.lvCEMemory.Name = "lvCEMemory";
this.lvCEMemory.Size = new System.Drawing.Size(700, 120);
this.lvCEMemory.Size = new System.Drawing.Size(706, 207);
this.lvCEMemory.TabIndex = 1;
this.lvCEMemory.UseCompatibleStateImageBehavior = false;
this.lvCEMemory.View = System.Windows.Forms.View.Details;
@ -926,8 +856,8 @@
this.tabSubAssembly.Controls.Add(this.lvCEAssembly);
this.tabSubAssembly.Location = new System.Drawing.Point(4, 22);
this.tabSubAssembly.Name = "tabSubAssembly";
this.tabSubAssembly.Padding = new System.Windows.Forms.Padding(3);
this.tabSubAssembly.Size = new System.Drawing.Size(706, 164);
this.tabSubAssembly.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
this.tabSubAssembly.Size = new System.Drawing.Size(715, 277);
this.tabSubAssembly.TabIndex = 1;
this.tabSubAssembly.Text = "Edit Assembly";
this.tabSubAssembly.UseVisualStyleBackColor = true;
@ -945,7 +875,7 @@
this.lvCEAssembly.Location = new System.Drawing.Point(3, 3);
this.lvCEAssembly.MultiSelect = false;
this.lvCEAssembly.Name = "lvCEAssembly";
this.lvCEAssembly.Size = new System.Drawing.Size(700, 158);
this.lvCEAssembly.Size = new System.Drawing.Size(709, 271);
this.lvCEAssembly.TabIndex = 4;
this.lvCEAssembly.UseCompatibleStateImageBehavior = false;
this.lvCEAssembly.View = System.Windows.Forms.View.Details;
@ -975,8 +905,8 @@
this.tabOutput.Controls.Add(this.splitContainer5);
this.tabOutput.Location = new System.Drawing.Point(4, 22);
this.tabOutput.Name = "tabOutput";
this.tabOutput.Padding = new System.Windows.Forms.Padding(3);
this.tabOutput.Size = new System.Drawing.Size(720, 196);
this.tabOutput.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
this.tabOutput.Size = new System.Drawing.Size(726, 305);
this.tabOutput.TabIndex = 3;
this.tabOutput.Text = "Debug Output";
this.tabOutput.UseVisualStyleBackColor = true;
@ -998,7 +928,7 @@
// splitContainer5.Panel2
//
this.splitContainer5.Panel2.Controls.Add(this.lbDebug);
this.splitContainer5.Size = new System.Drawing.Size(714, 190);
this.splitContainer5.Size = new System.Drawing.Size(720, 299);
this.splitContainer5.SplitterDistance = 26;
this.splitContainer5.TabIndex = 6;
//
@ -1009,7 +939,7 @@
this.txFilter.Enabled = false;
this.txFilter.Location = new System.Drawing.Point(41, 3);
this.txFilter.Name = "txFilter";
this.txFilter.Size = new System.Drawing.Size(670, 20);
this.txFilter.Size = new System.Drawing.Size(676, 20);
this.txFilter.TabIndex = 4;
//
// label3
@ -1029,7 +959,7 @@
this.lbDebug.Location = new System.Drawing.Point(0, 0);
this.lbDebug.Name = "lbDebug";
this.lbDebug.ScrollAlwaysVisible = true;
this.lbDebug.Size = new System.Drawing.Size(714, 160);
this.lbDebug.Size = new System.Drawing.Size(720, 269);
this.lbDebug.TabIndex = 3;
//
// diagSaveMemory
@ -1044,22 +974,17 @@
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.ClientSize = new System.Drawing.Size(734, 331);
this.Controls.Add(this.tableLayoutPanel3);
this.Controls.Add(this.toolStrip1);
this.Controls.Add(this.tabContainer);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "Form1";
this.Text = "Cxbx-Reloaded Debugger";
this.Text = "unnamed instance";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.tableLayoutPanel3.ResumeLayout(false);
this.tableLayoutPanel3.PerformLayout();
this.statusBar.ResumeLayout(false);
this.statusBar.PerformLayout();
this.tabContainer.ResumeLayout(false);
this.tabSummary.ResumeLayout(false);
this.tabSummary.PerformLayout();
this.tabDisassembly.ResumeLayout(false);
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel1.PerformLayout();
@ -1104,20 +1029,10 @@
((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).EndInit();
this.splitContainer5.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ListBox lbConsole;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton btnStart;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripButton btnSuspend;
private System.Windows.Forms.ToolStripButton btnResume;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripComboBox cbThreads;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
private System.Windows.Forms.TabControl tabContainer;
private System.Windows.Forms.TabPage tabDisassembly;
private System.Windows.Forms.TabPage tabBreakpoints;
@ -1135,8 +1050,6 @@
private System.Windows.Forms.TextBox txAddress;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox tbFilter;
private System.Windows.Forms.StatusStrip statusBar;
private System.Windows.Forms.ToolStripStatusLabel lblStatus;
private RicherTextBox txDisassembly;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
@ -1147,9 +1060,6 @@
private System.Windows.Forms.SplitContainer splitContainer3;
private System.Windows.Forms.SplitContainer splitContainer4;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.ToolStripLabel toolStripLabel1;
private System.Windows.Forms.ToolStripComboBox cbFrames;
private System.Windows.Forms.ToolStripLabel toolStripLabel2;
private System.Windows.Forms.SplitContainer splitContainer5;
private System.Windows.Forms.TextBox txFilter;
private System.Windows.Forms.Label label3;
@ -1192,6 +1102,12 @@
private System.Windows.Forms.Button btnLoadCT;
private System.Windows.Forms.Button btnRefresh;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TabPage tabSummary;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.LinkLabel linkLabel3;
private System.Windows.Forms.LinkLabel linkLabel2;
private System.Windows.Forms.LinkLabel linkLabel1;
}
}

View File

@ -8,15 +8,15 @@ using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using cs_x86;
using System.Runtime.InteropServices;
namespace CxbxDebugger
{
public partial class Form1 : Form
public partial class Form1 : Form, IDebugWindow
{
Thread DebuggerWorkerThread;
Debugger DebuggerInst;
string[] StartupArgs;
string CachedTitle = "";
bool SuspendedOnBp = false;
DebuggerFormEvents DebugEvents;
@ -29,25 +29,29 @@ namespace CxbxDebugger
DebugOutputManager debugStrMan;
PatchManager patchMan;
IDebugContainerWindow DebugContainer
{
get
{
return MdiParent as IDebugContainerWindow;
}
}
List<DebuggerMessages.FileOpened> FileHandles = new List<DebuggerMessages.FileOpened>();
public Form1()
public Form1(string[] args)
{
InitializeComponent();
// TODO: Cleanup arg handling
string[] args = Environment.GetCommandLineArgs();
#if !DEBUG
// Arguments are expected before the Form is created
if (args.Length < 2)
{
throw new Exception("Incorrect usage");
}
#endif
StartupArgs = new string[args.Length - 1];
Array.Copy(args, 1, StartupArgs, 0, args.Length - 1);
StartupArgs = args;
DebugEvents = new DebuggerFormEvents(this);
@ -73,6 +77,8 @@ namespace CxbxDebugger
fileWatchMan = new FileWatchManager(clbBreakpoints);
debugStrMan = new DebugOutputManager(lbDebug);
patchMan = new PatchManager();
CreateDebuggerOnce();
}
private void OnDisassemblyNavigation(object sender, InlineLinkClickedEventArgs e)
@ -82,38 +88,55 @@ namespace CxbxDebugger
ShowDisassemblyAt(e.Link);
}
private void StartDebugging()
private void CreateDebuggerOnce()
{
bool Create = false;
if (DebuggerWorkerThread == null)
{
// First launch
Create = true;
}
else if (DebuggerWorkerThread.ThreadState == ThreadState.Stopped)
{
// Further launches
Create = true;
}
if (Create)
if (DebuggerInst == null)
{
// Create debugger instance
DebuggerInst = new Debugger(StartupArgs);
DebuggerInst.RegisterEventInterfaces(DebugEvents);
DebuggerInst.RegisterEventInterfaces(patchMan);
var ProcessName = Path.GetFileName(DebuggerInst.ProcessName);
if (string.IsNullOrEmpty(ProcessName))
{
ProcessName = "<unknown>";
}
if (InvokeRequired)
{
// Set form title based on this new process
Invoke(new MethodInvoker(delegate ()
{
Text = ProcessName;
}));
}
else
{
Text = ProcessName;
}
}
}
private void StartDebugging()
{
if (GetSessionState() == SessionState.Inactive)
{
// Setup new debugger thread
DebuggerWorkerThread = new Thread(x =>
{
CreateDebuggerOnce();
if (DebuggerInst.Launch())
{
DebuggerInst.RunThreaded();
}
});
DebuggerWorkerThread.Name = "CxbxDebugger";
var ProcessName = Path.GetFileName(DebuggerInst.ProcessName);
DebuggerWorkerThread.Name = $"DebuggerFor_{ProcessName}";
DebuggerWorkerThread.Start();
}
}
@ -209,12 +232,12 @@ namespace CxbxDebugger
// Ensure we Add items on the right thread
Invoke(new MethodInvoker(delegate ()
{
lbConsole.Items.Insert(0, MessageStamped);
//lbConsole.Items.Insert(0, MessageStamped);
}));
}
else
{
lbConsole.Items.Insert(0, MessageStamped);
//lbConsole.Items.Insert(0, MessageStamped);
}
}
@ -286,12 +309,10 @@ namespace CxbxDebugger
{
Invoke(new MethodInvoker(delegate ()
{
CachedTitle = Title;
Text = string.Format("{0} - Cxbx-Reloaded Debugger", CachedTitle);
DebugContainer.ReportGameTitle(Title);
// This is done too late - modules are already loaded
//LoadCheatTable(string.Format("{0}.ct", CachedTitle));
//LoadCheatTable(string.Format("{0}.ct", Title));
}));
}
@ -341,34 +362,34 @@ namespace CxbxDebugger
Invoke(new MethodInvoker(delegate ()
{
// Disable when active
btnStart.Enabled = !Active;
//btnStart.Enabled = !Active;
// Enable when active
btnSuspend.Enabled = Active;
btnResume.Enabled = Active;
//// Enable when active
//btnSuspend.Enabled = Active;
//btnResume.Enabled = Active;
lblStatus.Text = (Active ? "Running" : "Inactive");
//lblStatus.Text = (Active ? "Running" : "Inactive");
}));
}
else
{
// Disable when active
btnStart.Enabled = !Active;
//// Disable when active
//btnStart.Enabled = !Active;
// Enable when active
btnSuspend.Enabled = Active;
btnResume.Enabled = Active;
//// Enable when active
//btnSuspend.Enabled = Active;
//btnResume.Enabled = Active;
lblStatus.Text = (Active ? "Running" : "Inactive");
//lblStatus.Text = (Active ? "Running" : "Inactive");
}
}
private void btnClearLog_Click(object sender, EventArgs e)
{
lbConsole.Items.Clear();
//lbConsole.Items.Clear();
}
class DebuggerFormEvents : IDebuggerGeneralEvents,
class DebuggerFormEvents : IDebuggerSessionEvents,
IDebuggerProcessEvents,
IDebuggerModuleEvents,
IDebuggerThreadEvents,
@ -378,6 +399,9 @@ namespace CxbxDebugger
{
Form1 frm;
public DebuggerFormEvents(Form1 main)
{
frm = main;
@ -426,6 +450,40 @@ namespace CxbxDebugger
frm.DebugTitle(Title);
}
// https://stackoverflow.com/a/749653
public static string[] CommandLineToArgs(string commandLine)
{
int argc;
var argv = VsChromium.Core.Win32.Processes.NativeMethods.CommandLineToArgvW(commandLine, out argc);
if (argv == IntPtr.Zero)
throw new System.ComponentModel.Win32Exception();
try
{
var args = new string[argc];
for (var i = 0; i < args.Length; i++)
{
var p = Marshal.ReadIntPtr(argv, i * IntPtr.Size);
args[i] = Marshal.PtrToStringUni(p);
}
return args;
}
finally
{
Marshal.FreeHGlobal(argv);
}
}
public void OnDebugTargetChanged(string CommandLine)
{
frm.DebugLog($"New debug session started - {CommandLine}");
frm.Invoke(new MethodInvoker(delegate ()
{
frm.DebugContainer.AddDebugSession(CommandLineToArgs(CommandLine), true);
}));
}
public void OnThreadCreate(DebuggerThread Thread)
{
frm.DebugLog(string.Format("Thread created {0}", Thread.ThreadID));
@ -478,7 +536,7 @@ namespace CxbxDebugger
frm.DebugLog(ExceptionMessage);
// Already suspended at this point, so we can rebuild the callstack list
frm.PopulateThreadList(frm.cbThreads, Thread);
//frm.PopulateThreadList(frm.cbThreads, Thread);
ExceptionMessage += "\n\nAttempt to ignore this and risk crashing the app?";
@ -547,11 +605,6 @@ namespace CxbxDebugger
}
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
StartDebugging();
}
private void Suspend(string Reason)
{
if (DebuggerInst != null)
@ -565,13 +618,13 @@ namespace CxbxDebugger
DebuggerInst.Trace();
NativeWrappers.FlashWindowTray(Handle);
PopulateThreadList(cbThreads, null);
//PopulateThreadList(cbThreads, null);
}
lblStatus.Text = string.Format("Suspended ({0})", Reason);
//lblStatus.Text = string.Format("Suspended ({0})", Reason);
cbThreads.Enabled = true;
cbFrames.Enabled = true;
//cbThreads.Enabled = true;
//cbFrames.Enabled = true;
}
private void Resume()
@ -589,20 +642,11 @@ namespace CxbxDebugger
}
}
lblStatus.Text = "Running";
//lblStatus.Text = "Running";
cbThreads.Enabled = false;
cbFrames.Enabled = false;
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
Suspend("manually triggered");
}
private void toolStripButton3_Click(object sender, EventArgs e)
{
Resume();
//cbThreads.Enabled = false;
//cbFrames.Enabled = false;
}
struct CallstackInfo
@ -816,22 +860,19 @@ namespace CxbxDebugger
private void cbFrames_SelectedIndexChanged(object sender, EventArgs e)
{
if (cbFrames.SelectedIndex != -1)
{
CallstackInfo info = CallstackDump[cbFrames.SelectedIndex];
//if (cbFrames.SelectedIndex != -1)
//{
// CallstackInfo info = CallstackDump[cbFrames.SelectedIndex];
if (info.InstructionPointer == 0)
return;
// if (info.InstructionPointer == 0)
// return;
DumpDisassembly(info.InstructionPointer);
}
// DumpDisassembly(info.InstructionPointer);
//}
}
private void btnDumpMemory_Click(object sender, EventArgs e)
{
if (DebuggerInst == null)
return;
if (diagSaveMemory.ShowDialog() == DialogResult.OK)
{
byte[] data = ReadMemory();
@ -848,12 +889,14 @@ namespace CxbxDebugger
private void DumpCallstack(bool ShowExternal = true)
{
int Index = cbThreads.SelectedIndex;
int Index = -1;
//int Index = cbThreads.SelectedIndex;
if (Index == -1)
return;
CallstackDump.Clear();
cbFrames.Items.Clear();
//cbFrames.Items.Clear();
int OtherModuleCount = 0;
@ -891,7 +934,7 @@ namespace CxbxDebugger
if (OtherModuleCount > 0)
{
CallstackDump.Add(new CallstackInfo());
cbFrames.Items.Add("[External Code]");
//cbFrames.Items.Add("[External Code]");
OtherModuleCount = 0;
}
}
@ -901,7 +944,7 @@ namespace CxbxDebugger
// To program counter
CallstackDump.Add(new CallstackInfo((uint)StackFrame.PC, ModuleBase));
cbFrames.Items.Add(FrameString);
//cbFrames.Items.Add(FrameString);
}
if (!ShowExternal)
@ -909,16 +952,16 @@ namespace CxbxDebugger
if (OtherModuleCount > 0)
{
CallstackDump.Add(new CallstackInfo());
cbFrames.Items.Add("[External Code]");
//cbFrames.Items.Add("[External Code]");
OtherModuleCount = 0;
}
}
if (cbFrames.Items.Count > 0)
{
// Auto-select the first item to dump
cbFrames.SelectedIndex = 0;
}
//if (cbFrames.Items.Count > 0)
//{
// // Auto-select the first item to dump
// cbFrames.SelectedIndex = 0;
//}
}
private void cbThreads_SelectedIndexChanged(object sender, EventArgs e)
@ -1230,5 +1273,55 @@ namespace CxbxDebugger
}
}
}
public SessionState GetSessionState()
{
if (DebuggerWorkerThread == null)
{
return SessionState.Inactive;
}
else if (DebuggerWorkerThread.ThreadState == ThreadState.Stopped)
{
return SessionState.Ended;
}
return SessionState.Running;
}
public void StartSession()
{
if (GetSessionState() == SessionState.Inactive)
{
StartDebugging();
}
}
public void SuspendSession()
{
if (GetSessionState() == SessionState.Running)
{
Suspend("manually triggered");
}
}
public void ResumeSession()
{
Resume();
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
tabContainer.SelectedTab = tabWatch;
}
private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
tabContainer.SelectedTab = tabMemory;
}
private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
tabContainer.SelectedTab = tabDisassembly;
}
}
}

View File

@ -117,12 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="statusBar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>122, 17</value>
</metadata>
<metadata name="diagSaveMemory.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>238, 17</value>
</metadata>

View File

@ -0,0 +1,31 @@
// Written by x1nixmzeng for the Cxbx-Reloaded project
//
namespace CxbxDebugger
{
public enum SessionState
{
Inactive,
Running,
Ended,
}
public interface IDebugWindow
{
void StartSession();
void SuspendSession();
void ResumeSession();
SessionState GetSessionState();
}
public interface IDebugContainerWindow
{
void AddDebugSession(string[] Arguments, bool StartAutomatically);
void ReportGameTitle(string GameTitle);
}
}

View File

@ -18,6 +18,7 @@ namespace CxbxDebugger
Application.SetCompatibleTextRenderingDefault(false);
string[] args = Environment.GetCommandLineArgs();
#if !DEBUG
if( args.Length == 1 )
{
// TODO: Valid usage message
@ -25,8 +26,9 @@ namespace CxbxDebugger
Application.Exit();
}
else
#endif
{
Application.Run(new Form1());
Application.Run(new CxbxDebuggerMain(args));
}
}
}