Debugger UI skeleton.

This commit is contained in:
Ben Vanik 2015-05-22 14:58:56 -07:00
parent 8a5d3526e5
commit 969badd8c3
51 changed files with 1555 additions and 12 deletions

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Controls {
partial class BaseDocument {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "BaseDocument";
}
#endregion
}
}

View File

@ -0,0 +1,18 @@
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;
using WeifenLuo.WinFormsUI.Docking;
namespace Xenia.Debug.UI.Controls {
public partial class BaseDocument : DockContent {
public BaseDocument() {
InitializeComponent();
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Controls {
partial class BasePanel {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "BasePanel";
}
#endregion
}
}

View File

@ -7,10 +7,11 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
namespace Xenia.Debug.UI {
public partial class Form1 : Form {
public Form1() {
namespace Xenia.Debug.UI.Controls {
public partial class BasePanel : DockContent {
public BasePanel() {
InitializeComponent();
}
}

121
src/Xenia.Debug.UI/MainWindow.Designer.cs generated Normal file
View File

@ -0,0 +1,121 @@
namespace Xenia.Debug.UI {
partial class MainWindow {
/// <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() {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
this.mainMenuStrip = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.mainToolStrip = new System.Windows.Forms.ToolStrip();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.statusStrip = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
this.mainMenuStrip.SuspendLayout();
this.mainToolStrip.SuspendLayout();
this.statusStrip.SuspendLayout();
this.SuspendLayout();
//
// mainMenuStrip
//
this.mainMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem});
this.mainMenuStrip.Location = new System.Drawing.Point(0, 0);
this.mainMenuStrip.Name = "mainMenuStrip";
this.mainMenuStrip.Size = new System.Drawing.Size(1571, 24);
this.mainMenuStrip.TabIndex = 0;
//
// fileToolStripMenuItem
//
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
this.fileToolStripMenuItem.Text = "&File";
//
// mainToolStrip
//
this.mainToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripButton1});
this.mainToolStrip.Location = new System.Drawing.Point(0, 24);
this.mainToolStrip.Name = "mainToolStrip";
this.mainToolStrip.Size = new System.Drawing.Size(1571, 25);
this.mainToolStrip.TabIndex = 3;
this.mainToolStrip.Text = "toolStrip1";
//
// toolStripButton1
//
this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton1.Name = "toolStripButton1";
this.toolStripButton1.Size = new System.Drawing.Size(23, 22);
this.toolStripButton1.Text = "toolStripButton1";
//
// statusStrip
//
this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabel1});
this.statusStrip.Location = new System.Drawing.Point(0, 1081);
this.statusStrip.Name = "statusStrip";
this.statusStrip.Size = new System.Drawing.Size(1571, 22);
this.statusStrip.TabIndex = 4;
this.statusStrip.Text = "statusStrip1";
//
// toolStripStatusLabel1
//
this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
this.toolStripStatusLabel1.Size = new System.Drawing.Size(118, 17);
this.toolStripStatusLabel1.Text = "toolStripStatusLabel1";
//
// MainWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1571, 1103);
this.Controls.Add(this.statusStrip);
this.Controls.Add(this.mainToolStrip);
this.Controls.Add(this.mainMenuStrip);
this.IsMdiContainer = true;
this.MainMenuStrip = this.mainMenuStrip;
this.Name = "MainWindow";
this.Text = "Xenia Debugger";
this.mainMenuStrip.ResumeLayout(false);
this.mainMenuStrip.PerformLayout();
this.mainToolStrip.ResumeLayout(false);
this.mainToolStrip.PerformLayout();
this.statusStrip.ResumeLayout(false);
this.statusStrip.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.MenuStrip mainMenuStrip;
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
private System.Windows.Forms.ToolStrip mainToolStrip;
private System.Windows.Forms.ToolStripButton toolStripButton1;
private System.Windows.Forms.StatusStrip statusStrip;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
private WeifenLuo.WinFormsUI.Docking.DockPanel dockPanel;
}
}

View File

@ -0,0 +1,104 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Views;
namespace Xenia.Debug.UI {
public partial class MainWindow : Form {
private DeserializeDockContent deserializeDockContent;
private BreakpointsPanel breakpointsPanel;
private CallstackPanel callstackPanel;
private List<CodeDocument> codeDocuments = new List<CodeDocument>();
private FilesystemPanel filesystemPanel;
private FunctionsPanel functionsPanel;
private HeapDocument heapDocument;
private List<MemoryDocument> memoryDocuments = new List<MemoryDocument>();
private ModulesPanel modulesPanel;
private ProfilePanel profilePanel;
private List<RegistersPanel> registersPanels = new List<RegistersPanel>();
private StatisticsDocument statisticsDocument;
private ThreadsPanel threadsPanel;
private TracePanel tracePanel;
public Debugger Debugger {
get;
}
public MainWindow() {
InitializeComponent();
dockPanel = new DockPanel();
dockPanel.Dock = System.Windows.Forms.DockStyle.Fill;
dockPanel.DockBackColor = System.Drawing.SystemColors.AppWorkspace;
dockPanel.DockBottomPortion = 200D;
dockPanel.DockLeftPortion = 350D;
dockPanel.Name = "dockPanel";
Controls.Add(dockPanel);
Controls.SetChildIndex(dockPanel, 0);
this.Debugger = new Debugger();
breakpointsPanel = new BreakpointsPanel(Debugger);
callstackPanel = new CallstackPanel(Debugger);
codeDocuments.Add(new CodeDocument(Debugger));
filesystemPanel = new FilesystemPanel(Debugger);
functionsPanel = new FunctionsPanel(Debugger);
heapDocument = new HeapDocument(Debugger);
memoryDocuments.Add(new MemoryDocument(Debugger));
modulesPanel = new ModulesPanel(Debugger);
profilePanel = new ProfilePanel(Debugger);
registersPanels.Add(new RegistersPanel(Debugger, RegisterClass.GuestGeneralPurpose));
registersPanels.Add(new RegistersPanel(Debugger, RegisterClass.GuestFloatingPoint));
registersPanels.Add(new RegistersPanel(Debugger, RegisterClass.GuestVector));
statisticsDocument = new StatisticsDocument(Debugger);
threadsPanel = new ThreadsPanel(Debugger);
tracePanel = new TracePanel(Debugger);
// deserializeDockContent =
// new DeserializeDockContent(GetContentFromPersistString);
SetupDefaultLayout();
}
private void SetupDefaultLayout() {
dockPanel.SuspendLayout(true);
filesystemPanel.Show(dockPanel, DockState.DockLeft);
functionsPanel.Show(filesystemPanel.Pane, filesystemPanel);
breakpointsPanel.Show(dockPanel, DockState.DockBottom);
callstackPanel.Show(breakpointsPanel.Pane, breakpointsPanel);
modulesPanel.Show(breakpointsPanel.Pane, DockAlignment.Right, 0.5);
threadsPanel.Show(modulesPanel.Pane, modulesPanel);
registersPanels[registersPanels.Count - 1].Show(filesystemPanel.Pane,
DockAlignment.Right, 0.5);
for (int i = registersPanels.Count - 2; i >= 0; --i) {
registersPanels[i].Show(registersPanels[i + 1].Pane, registersPanels[i + 1]);
}
foreach (var codeDocument in codeDocuments) {
codeDocument.Show(dockPanel, DockState.Document);
}
heapDocument.Show(codeDocuments[0].Pane, DockAlignment.Right, 0.5);
for (int i = 0; i < memoryDocuments.Count; ++i) {
memoryDocuments[i].Show(heapDocument.Pane, heapDocument);
}
tracePanel.Show(heapDocument.Pane, DockAlignment.Bottom, 0.5);
statisticsDocument.Show(tracePanel.Pane, tracePanel);
dockPanel.ResumeLayout(true, true);
}
}
}

View File

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="mainMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="mainMenuStrip.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="mainToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>132, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>237, 17</value>
</metadata>
</root>

View File

@ -9,7 +9,7 @@ namespace Xenia.Debug.UI {
[STAThread] static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Application.Run(new MainWindow());
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class BreakpointsPanel {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Breakpoints";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class BreakpointsPanel : BasePanel {
private readonly Debugger debugger;
public BreakpointsPanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class CallstackPanel {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Callstack";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class CallstackPanel : BasePanel {
private readonly Debugger debugger;
public CallstackPanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class CodeDocument {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Code";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class CodeDocument : BaseDocument {
private readonly Debugger debugger;
public CodeDocument(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class FilesystemPanel {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Filesystem";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class FilesystemPanel : BasePanel {
private readonly Debugger debugger;
public FilesystemPanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class FunctionsPanel {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Functions";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class FunctionsPanel : BasePanel {
private readonly Debugger debugger;
public FunctionsPanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class HeapDocument {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Heap";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class HeapDocument : BaseDocument {
private readonly Debugger debugger;
public HeapDocument(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class MemoryDocument {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Memory";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class MemoryDocument : BaseDocument {
private readonly Debugger debugger;
public MemoryDocument(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class ModulesPanel {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Modules";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class ModulesPanel : BasePanel {
private readonly Debugger debugger;
public ModulesPanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class ProfilePanel {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Profile";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class ProfilePanel : BasePanel {
private readonly Debugger debugger;
public ProfilePanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class RegistersPanel {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Registers";
}
#endregion
}
}

View File

@ -0,0 +1,53 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public enum RegisterClass {
GuestGeneralPurpose,
GuestFloatingPoint,
GuestVector,
HostGeneralPurpose,
HostAvx,
}
public partial class RegistersPanel : BasePanel {
private readonly Debugger debugger;
private readonly RegisterClass registerClass;
public RegistersPanel(Debugger debugger, RegisterClass registerClass) {
InitializeComponent();
this.debugger = debugger;
this.registerClass = registerClass;
switch (registerClass) {
case RegisterClass.GuestGeneralPurpose:
this.Text = "GPR";
break;
case RegisterClass.GuestFloatingPoint:
this.Text = "FPR";
break;
case RegisterClass.GuestVector:
this.Text = "VR";
break;
case RegisterClass.HostGeneralPurpose:
this.Text = "x64";
break;
case RegisterClass.HostAvx:
this.Text = "AVX";
break;
default:
System.Diagnostics.Debug.Fail("Unhandled case: " + registerClass);
break;
}
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class StatisticsDocument {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Statistics";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class StatisticsDocument : BaseDocument {
private readonly Debugger debugger;
public StatisticsDocument(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -0,0 +1,33 @@
namespace Xenia.Debug.UI.Views {
partial class ThreadsPanel {
/// <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();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Threads";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class ThreadsPanel : BasePanel {
private readonly Debugger debugger;
public ThreadsPanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -1,5 +1,5 @@
namespace Xenia.Debug.UI {
partial class Form1 {
namespace Xenia.Debug.UI.Views {
partial class TracePanel {
/// <summary>
/// Required designer variable.
/// </summary>
@ -25,10 +25,9 @@
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Form1";
this.Text = "Trace";
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
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;
using WeifenLuo.WinFormsUI.Docking;
using Xenia.Debug.UI.Controls;
namespace Xenia.Debug.UI.Views {
public partial class TracePanel : BasePanel {
private readonly Debugger debugger;
public TracePanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
}
}
}

View File

@ -51,14 +51,107 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<Compile Include="Controls\BaseDocument.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
<Compile Include="Controls\BaseDocument.Designer.cs">
<DependentUpon>BaseDocument.cs</DependentUpon>
</Compile>
<Compile Include="Controls\BasePanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Controls\BasePanel.Designer.cs">
<DependentUpon>BasePanel.cs</DependentUpon>
</Compile>
<Compile Include="MainWindow.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainWindow.Designer.cs">
<DependentUpon>MainWindow.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Views\BreakpointsPanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\BreakpointsPanel.Designer.cs">
<DependentUpon>BreakpointsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Views\CallstackPanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\CallstackPanel.Designer.cs">
<DependentUpon>CallstackPanel.cs</DependentUpon>
</Compile>
<Compile Include="Views\CodeDocument.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\CodeDocument.Designer.cs">
<DependentUpon>CodeDocument.cs</DependentUpon>
</Compile>
<Compile Include="Views\FilesystemPanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\FilesystemPanel.Designer.cs">
<DependentUpon>FilesystemPanel.cs</DependentUpon>
</Compile>
<Compile Include="Views\FunctionsPanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\FunctionsPanel.Designer.cs">
<DependentUpon>FunctionsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Views\HeapDocument.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\HeapDocument.Designer.cs">
<DependentUpon>HeapDocument.cs</DependentUpon>
</Compile>
<Compile Include="Views\MemoryDocument.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\MemoryDocument.Designer.cs">
<DependentUpon>MemoryDocument.cs</DependentUpon>
</Compile>
<Compile Include="Views\ModulesPanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\ModulesPanel.Designer.cs">
<DependentUpon>ModulesPanel.cs</DependentUpon>
</Compile>
<Compile Include="Views\ProfilePanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\ProfilePanel.Designer.cs">
<DependentUpon>ProfilePanel.cs</DependentUpon>
</Compile>
<Compile Include="Views\RegistersPanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\RegistersPanel.Designer.cs">
<DependentUpon>RegistersPanel.cs</DependentUpon>
</Compile>
<Compile Include="Views\StatisticsDocument.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\StatisticsDocument.Designer.cs">
<DependentUpon>StatisticsDocument.cs</DependentUpon>
</Compile>
<Compile Include="Views\ThreadsPanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\ThreadsPanel.Designer.cs">
<DependentUpon>ThreadsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Views\TracePanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Views\TracePanel.Designer.cs">
<DependentUpon>TracePanel.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="MainWindow.resx">
<DependentUpon>MainWindow.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class Breakpoint : Changeable {
// type code/data/kernel
// address+[end address]
// conditions? script?
// action (suspend, trace, etc)
}
}

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class BreakpointList : Changeable {
private readonly List<Breakpoint> breakpoints = new List<Breakpoint>();
public void Add(Breakpoint breakpoint) {
}
public void Remove(Breakpoint breakpoint) {
}
public void Clear() {
}
}
}

View File

@ -0,0 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Xenia.Debug {
public class Callstack {
}
}

View File

@ -0,0 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Xenia.Debug {
public class DebugClient {
}
}

View File

@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Xenia.Debug {
public class Debugger {
public DebugClient DebugClient {
get;
}
public BreakpointList BreakpointList {
get;
}
public FunctionList FunctionList {
get;
}
public Memory Memory {
get;
}
public ModuleList ModuleList {
get;
}
public ThreadList ThreadList {
get;
}
public Debugger() {
this.DebugClient = new DebugClient();
this.BreakpointList = new BreakpointList();
this.FunctionList = new FunctionList();
this.Memory = new Memory();
this.ModuleList = new ModuleList();
this.ThreadList = new ThreadList();
}
public bool Open() {
return true;
}
public delegate void ChangedEventHandler(EventArgs e);
public event ChangedEventHandler Changed;
private void OnChanged(EventArgs e) {
if (Changed != null) {
Changed(e);
}
}
}
}

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class Function : Changeable {
}
}

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class FunctionList : Changeable {
}
}

14
src/Xenia.Debug/Memory.cs Normal file
View File

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class Memory : Changeable {
public MemoryView CreateView() {
return new MemoryView(this);
}
}
}

View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class MemoryView : Changeable {
private readonly Memory memory;
public MemoryView(Memory memory) {
this.memory = memory;
}
}
}

11
src/Xenia.Debug/Module.cs Normal file
View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class Module : Changeable {
}
}

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class ModuleList : Changeable {
}
}

14
src/Xenia.Debug/Thread.cs Normal file
View File

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class ThreadContext {
}
public class Thread : Changeable {
}
}

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class ThreadList : Changeable {
}
}

View File

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Xenia.Debug.Utilities {
public delegate void ChangedEventHandler();
public class Changeable {
private int changeDepth;
public event ChangedEventHandler Changed;
protected void BeginChanging() {
++changeDepth;
}
protected void EndChanging() {
if (--changeDepth == 0) {
OnChanged();
}
}
protected void OnChanged() {
System.Diagnostics.Debug.Assert(changeDepth == 0);
if (Changed != null) {
Changed();
}
}
}
}

View File

@ -43,7 +43,21 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Breakpoint.cs" />
<Compile Include="BreakpointList.cs" />
<Compile Include="Callstack.cs" />
<Compile Include="DebugClient.cs" />
<Compile Include="Debugger.cs" />
<Compile Include="Function.cs" />
<Compile Include="FunctionList.cs" />
<Compile Include="Memory.cs" />
<Compile Include="MemoryView.cs" />
<Compile Include="Module.cs" />
<Compile Include="ModuleList.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Thread.cs" />
<Compile Include="ThreadList.cs" />
<Compile Include="Utilities\Changeable.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@ -0,0 +1,27 @@
namespace Xenia.Debugger.Proto;
attribute "priority"; // ?
enum Foo:byte (bit_flags) {
A,
B,
}
struct StructTest {
a:short;
b:byte;
c:Foo;
}
table TableTest {
st:StructTest;
iv:[ubyte];
name:string (required);
id:uint (required, key);
}
union UnionTest {
TableTest,
}
root_type UnionTest;