Fleshing out debugger types.

This commit is contained in:
Ben Vanik 2015-05-24 13:43:15 -07:00
parent da655d15b3
commit e55be7d2c9
103 changed files with 4008 additions and 2025 deletions

BIN
assets/icons/pause.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

BIN
assets/icons/play.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

BIN
assets/icons/step_in.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

BIN
assets/icons/step_out.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

BIN
assets/icons/step_over.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

BIN
assets/icons/stop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

View File

@ -290,10 +290,13 @@
<ClInclude Include="src\xenia\cpu\xex_module.h" />
<ClInclude Include="src\xenia\debug\breakpoint.h" />
<ClInclude Include="src\xenia\debug\debugger.h" />
<ClInclude Include="src\xenia\debug\function_data.h" />
<ClInclude Include="src\xenia\debug\function_trace_data.h" />
<ClInclude Include="src\xenia\debug\proto\breakpoints_generated.h" />
<ClInclude Include="src\xenia\debug\proto\common_generated.h" />
<ClInclude Include="src\xenia\debug\proto\control_generated.h" />
<ClInclude Include="src\xenia\debug\proto\messages_generated.h" />
<ClInclude Include="src\xenia\debug\proto\modules_generated.h" />
<ClInclude Include="src\xenia\debug\proto\threads_generated.h" />
<ClInclude Include="src\xenia\emulator.h" />
<ClInclude Include="src\xenia\gpu\gl4\blitter.h" />
<ClInclude Include="src\xenia\gpu\gl4\circular_buffer.h" />
@ -419,7 +422,12 @@
<ItemGroup>
<None Include="src\xenia\cpu\backend\x64\x64_sequence.inl" />
<None Include="src\xenia\cpu\hir\opcodes.inl" />
<None Include="src\xenia\debug\proto\breakpoints.fbs" />
<None Include="src\xenia\debug\proto\common.fbs" />
<None Include="src\xenia\debug\proto\control.fbs" />
<None Include="src\xenia\debug\proto\messages.fbs" />
<None Include="src\xenia\debug\proto\modules.fbs" />
<None Include="src\xenia\debug\proto\threads.fbs" />
<None Include="src\xenia\gpu\register_table.inc" />
<None Include="src\xenia\kernel\util\export_table_post.inc" />
<None Include="src\xenia\kernel\util\export_table_pre.inc" />
@ -540,4 +548,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -30,9 +30,21 @@
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.statusStrip = new System.Windows.Forms.StatusStrip();
this.statusMessageLabel = new System.Windows.Forms.ToolStripStatusLabel();
this.controlToolStrip = new System.Windows.Forms.ToolStrip();
this.threadToolStripLabel = new System.Windows.Forms.ToolStripLabel();
this.threadToolStripComboBox = new System.Windows.Forms.ToolStripComboBox();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.continueToolStripButton = new System.Windows.Forms.ToolStripButton();
this.breakToolStripButton = new System.Windows.Forms.ToolStripButton();
this.stopToolStripButton = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.stepInToolStripButton = new System.Windows.Forms.ToolStripButton();
this.stepOverToolStripButton = new System.Windows.Forms.ToolStripButton();
this.stepOutToolStripButton = new System.Windows.Forms.ToolStripButton();
this.mainMenuStrip.SuspendLayout();
this.mainToolStrip.SuspendLayout();
this.statusStrip.SuspendLayout();
this.controlToolStrip.SuspendLayout();
this.SuspendLayout();
//
// mainMenuStrip
@ -82,14 +94,114 @@
// statusMessageLabel
//
this.statusMessageLabel.Name = "statusMessageLabel";
this.statusMessageLabel.Size = new System.Drawing.Size(118, 17);
this.statusMessageLabel.Text = "";
this.statusMessageLabel.Size = new System.Drawing.Size(0, 17);
//
// controlToolStrip
//
this.controlToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.threadToolStripLabel,
this.threadToolStripComboBox,
this.toolStripSeparator1,
this.continueToolStripButton,
this.breakToolStripButton,
this.stopToolStripButton,
this.toolStripSeparator2,
this.stepInToolStripButton,
this.stepOverToolStripButton,
this.stepOutToolStripButton});
this.controlToolStrip.Location = new System.Drawing.Point(0, 49);
this.controlToolStrip.Name = "controlToolStrip";
this.controlToolStrip.Size = new System.Drawing.Size(1571, 25);
this.controlToolStrip.TabIndex = 6;
this.controlToolStrip.Text = "toolStrip1";
//
// threadToolStripLabel
//
this.threadToolStripLabel.Name = "threadToolStripLabel";
this.threadToolStripLabel.Size = new System.Drawing.Size(47, 22);
this.threadToolStripLabel.Text = "Thread:";
//
// threadToolStripComboBox
//
this.threadToolStripComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.threadToolStripComboBox.Name = "threadToolStripComboBox";
this.threadToolStripComboBox.Size = new System.Drawing.Size(250, 25);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
//
// continueToolStripButton
//
this.continueToolStripButton.Image = global::Xenia.Debug.UI.Properties.Resources.play;
this.continueToolStripButton.ImageTransparentColor = System.Drawing.Color.Transparent;
this.continueToolStripButton.Name = "continueToolStripButton";
this.continueToolStripButton.Size = new System.Drawing.Size(76, 22);
this.continueToolStripButton.Text = "Continue";
this.continueToolStripButton.Click += new System.EventHandler(this.continueToolStripButton_Click);
//
// breakToolStripButton
//
this.breakToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.breakToolStripButton.Image = global::Xenia.Debug.UI.Properties.Resources.pause;
this.breakToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.breakToolStripButton.Name = "breakToolStripButton";
this.breakToolStripButton.Size = new System.Drawing.Size(23, 22);
this.breakToolStripButton.Text = "Break";
this.breakToolStripButton.Click += new System.EventHandler(this.breakToolStripButton_Click);
//
// stopToolStripButton
//
this.stopToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.stopToolStripButton.Image = global::Xenia.Debug.UI.Properties.Resources.stop;
this.stopToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.stopToolStripButton.Name = "stopToolStripButton";
this.stopToolStripButton.Size = new System.Drawing.Size(23, 22);
this.stopToolStripButton.Text = "Stop";
this.stopToolStripButton.Click += new System.EventHandler(this.stopToolStripButton_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
//
// stepInToolStripButton
//
this.stepInToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.stepInToolStripButton.Image = global::Xenia.Debug.UI.Properties.Resources.step_in;
this.stepInToolStripButton.ImageTransparentColor = System.Drawing.Color.Transparent;
this.stepInToolStripButton.Name = "stepInToolStripButton";
this.stepInToolStripButton.Size = new System.Drawing.Size(23, 22);
this.stepInToolStripButton.Text = "Step In";
this.stepInToolStripButton.Click += new System.EventHandler(this.stepInToolStripButton_Click);
//
// stepOverToolStripButton
//
this.stepOverToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.stepOverToolStripButton.Image = global::Xenia.Debug.UI.Properties.Resources.step_over;
this.stepOverToolStripButton.ImageTransparentColor = System.Drawing.Color.Transparent;
this.stepOverToolStripButton.Name = "stepOverToolStripButton";
this.stepOverToolStripButton.Size = new System.Drawing.Size(23, 22);
this.stepOverToolStripButton.Text = "Step Over";
this.stepOverToolStripButton.Click += new System.EventHandler(this.stepOverToolStripButton_Click);
//
// stepOutToolStripButton
//
this.stepOutToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.stepOutToolStripButton.Image = global::Xenia.Debug.UI.Properties.Resources.step_out;
this.stepOutToolStripButton.ImageTransparentColor = System.Drawing.Color.Transparent;
this.stepOutToolStripButton.Name = "stepOutToolStripButton";
this.stepOutToolStripButton.Size = new System.Drawing.Size(23, 22);
this.stepOutToolStripButton.Text = "Step Out";
this.stepOutToolStripButton.Click += new System.EventHandler(this.stepOutToolStripButton_Click);
//
// 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.controlToolStrip);
this.Controls.Add(this.statusStrip);
this.Controls.Add(this.mainToolStrip);
this.Controls.Add(this.mainMenuStrip);
@ -103,6 +215,8 @@
this.mainToolStrip.PerformLayout();
this.statusStrip.ResumeLayout(false);
this.statusStrip.PerformLayout();
this.controlToolStrip.ResumeLayout(false);
this.controlToolStrip.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
@ -117,5 +231,16 @@
private System.Windows.Forms.StatusStrip statusStrip;
private System.Windows.Forms.ToolStripStatusLabel statusMessageLabel;
private WeifenLuo.WinFormsUI.Docking.DockPanel dockPanel;
private System.Windows.Forms.ToolStrip controlToolStrip;
private System.Windows.Forms.ToolStripLabel threadToolStripLabel;
private System.Windows.Forms.ToolStripComboBox threadToolStripComboBox;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripButton continueToolStripButton;
private System.Windows.Forms.ToolStripButton breakToolStripButton;
private System.Windows.Forms.ToolStripButton stopToolStripButton;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripButton stepInToolStripButton;
private System.Windows.Forms.ToolStripButton stepOverToolStripButton;
private System.Windows.Forms.ToolStripButton stepOutToolStripButton;
}
}

View File

@ -70,13 +70,19 @@ namespace Xenia.Debug.UI {
SetupDefaultLayout();
// For hotkeys.
KeyPreview = true;
Debugger.StateChanged += Debugger_StateChanged;
Debugger_StateChanged(this, Debugger.CurrentState);
Debugger.CurrentContext.Changed += CurrentContext_Changed;
CurrentContext_Changed();
Debugger.Attach();
}
private void Debugger_StateChanged(object sender, Debugger.State e) {
bool enabled = false;
switch (e) {
case Debugger.State.Idle:
statusMessageLabel.Text = "Idle";
@ -86,11 +92,36 @@ namespace Xenia.Debug.UI {
break;
case Debugger.State.Attached:
statusMessageLabel.Text = "Attached";
enabled = true;
break;
case Debugger.State.Detached:
statusMessageLabel.Text = "Detached";
break;
}
controlToolStrip.Enabled = enabled;
}
private void CurrentContext_Changed() {
bool enabled = false;
switch (Debugger.CurrentContext.RunState) {
case RunState.Updating:
enabled = false;
break;
case RunState.Running:
enabled = false;
break;
case RunState.Paused:
enabled = true;
break;
}
breakToolStripButton.Enabled = !enabled;
continueToolStripButton.Enabled = enabled;
stepInToolStripButton.Enabled = enabled;
stepOverToolStripButton.Enabled = enabled;
stepOutToolStripButton.Enabled = enabled;
// TODO(benvanik): set thread info/etc.
}
private void SetupDefaultLayout() {
@ -125,5 +156,53 @@ namespace Xenia.Debug.UI {
dockPanel.ResumeLayout(true, true);
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
//if (keyData == (Keys.Control | Keys.F)) {
// MessageBox.Show("What the Ctrl+F?");
// return true;
//}
if (keyData == Keys.F11) {
stepInToolStripButton_Click(this, EventArgs.Empty);
return true;
} else if (keyData == Keys.F10) {
stepOverToolStripButton_Click(this, EventArgs.Empty);
return true;
} else if (keyData == (Keys.Shift | Keys.F11)) {
stepOutToolStripButton_Click(this, EventArgs.Empty);
return true;
} else if (keyData == (Keys.Pause)) {
breakToolStripButton_Click(this, EventArgs.Empty);
return true;
} else if (keyData == (Keys.Shift | Keys.F5)) {
stopToolStripButton_Click(this, EventArgs.Empty);
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
private void continueToolStripButton_Click(object sender, EventArgs e) {
Debugger.Continue();
}
private void breakToolStripButton_Click(object sender, EventArgs e) {
Debugger.Break();
}
private void stopToolStripButton_Click(object sender, EventArgs e) {
Debugger.Stop();
}
private void stepInToolStripButton_Click(object sender, EventArgs e) {
Debugger.StepIn();
}
private void stepOverToolStripButton_Click(object sender, EventArgs e) {
Debugger.StepOver();
}
private void stepOutToolStripButton_Click(object sender, EventArgs e) {
Debugger.StepOut();
}
}
}

View File

@ -145,4 +145,7 @@
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>237, 17</value>
</metadata>
<metadata name="controlToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>346, 17</value>
</metadata>
</root>

View File

@ -9,54 +9,115 @@
//------------------------------------------------------------------------------
namespace Xenia.Debug.UI.Properties {
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
using System;
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if ((resourceMan == null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Xenia.Debug.UI.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Xenia.Debug.UI.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap pause {
get {
object obj = ResourceManager.GetObject("pause", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap play {
get {
object obj = ResourceManager.GetObject("play", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap step_in {
get {
object obj = ResourceManager.GetObject("step_in", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap step_out {
get {
object obj = ResourceManager.GetObject("step_out", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap step_over {
get {
object obj = ResourceManager.GetObject("step_over", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap stop {
get {
object obj = ResourceManager.GetObject("stop", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@ -46,7 +46,7 @@
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
@ -60,6 +60,7 @@
: 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">
@ -68,9 +69,10 @@
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<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">
@ -85,9 +87,10 @@
<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" msdata:Ordinal="1" />
<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">
@ -109,9 +112,28 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="pause" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pause.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="play" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="step_in" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\step_in.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="step_out" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\step_out.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="step_over" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\step_over.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="stop" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\stop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

View File

@ -23,11 +23,45 @@
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.breakpointsListView = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.SuspendLayout();
//
// breakpointsListView
//
this.breakpointsListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.breakpointsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2,
this.columnHeader3});
this.breakpointsListView.Location = new System.Drawing.Point(12, 12);
this.breakpointsListView.Name = "breakpointsListView";
this.breakpointsListView.Size = new System.Drawing.Size(738, 208);
this.breakpointsListView.TabIndex = 0;
this.breakpointsListView.UseCompatibleStateImageBehavior = false;
this.breakpointsListView.View = System.Windows.Forms.View.Details;
//
// BreakpointsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(762, 232);
this.Controls.Add(this.breakpointsListView);
this.Name = "BreakpointsPanel";
this.Text = "Breakpoints";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListView breakpointsListView;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ColumnHeader columnHeader3;
}
}

View File

@ -17,6 +17,18 @@ namespace Xenia.Debug.UI.Views {
public BreakpointsPanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
debugger.BreakpointList.Changed += UpdateBreakpointsList;
UpdateBreakpointsList();
}
private void UpdateBreakpointsList() {
breakpointsListView.BeginUpdate();
breakpointsListView.Items.Clear();
foreach (Breakpoint breakpoint in debugger.BreakpointList) {
breakpointsListView.Items.Add("Breakpoint A");
}
breakpointsListView.EndUpdate();
}
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -23,11 +23,45 @@
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.framesListView = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.SuspendLayout();
//
// framesListView
//
this.framesListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.framesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2,
this.columnHeader3});
this.framesListView.Location = new System.Drawing.Point(12, 12);
this.framesListView.Name = "framesListView";
this.framesListView.Size = new System.Drawing.Size(735, 217);
this.framesListView.TabIndex = 0;
this.framesListView.UseCompatibleStateImageBehavior = false;
this.framesListView.View = System.Windows.Forms.View.Details;
//
// CallstackPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(759, 241);
this.Controls.Add(this.framesListView);
this.Name = "CallstackPanel";
this.Text = "Callstack";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListView framesListView;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ColumnHeader columnHeader3;
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -23,11 +23,35 @@
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.sourceTextBox = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// sourceTextBox
//
this.sourceTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.sourceTextBox.Location = new System.Drawing.Point(12, 75);
this.sourceTextBox.Multiline = true;
this.sourceTextBox.Name = "sourceTextBox";
this.sourceTextBox.Size = new System.Drawing.Size(740, 586);
this.sourceTextBox.TabIndex = 0;
//
// CodeDocument
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(764, 673);
this.Controls.Add(this.sourceTextBox);
this.Name = "CodeDocument";
this.Text = "Code";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox sourceTextBox;
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -23,11 +23,62 @@
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.modulesComboBox = new System.Windows.Forms.ComboBox();
this.filterTextBox = new System.Windows.Forms.TextBox();
this.functionsListBox = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
// moduleComboBox
//
this.modulesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.modulesComboBox.FormattingEnabled = true;
this.modulesComboBox.Location = new System.Drawing.Point(12, 12);
this.modulesComboBox.Name = "moduleComboBox";
this.modulesComboBox.Size = new System.Drawing.Size(234, 21);
this.modulesComboBox.TabIndex = 0;
//
// filterTextBox
//
this.filterTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.filterTextBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.filterTextBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
this.filterTextBox.Location = new System.Drawing.Point(12, 569);
this.filterTextBox.Name = "filterTextBox";
this.filterTextBox.Size = new System.Drawing.Size(234, 20);
this.filterTextBox.TabIndex = 1;
//
// functionsListBox
//
this.functionsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.functionsListBox.FormattingEnabled = true;
this.functionsListBox.Location = new System.Drawing.Point(12, 39);
this.functionsListBox.Name = "functionsListBox";
this.functionsListBox.Size = new System.Drawing.Size(234, 524);
this.functionsListBox.TabIndex = 2;
//
// FunctionsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(258, 600);
this.Controls.Add(this.functionsListBox);
this.Controls.Add(this.filterTextBox);
this.Controls.Add(this.modulesComboBox);
this.Name = "FunctionsPanel";
this.Text = "Functions";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ComboBox modulesComboBox;
private System.Windows.Forms.TextBox filterTextBox;
private System.Windows.Forms.ListBox functionsListBox;
}
}

View File

@ -17,6 +17,18 @@ namespace Xenia.Debug.UI.Views {
public FunctionsPanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
debugger.ModuleList.Changed += UpdateModulesList;
UpdateModulesList();
}
private void UpdateModulesList() {
modulesComboBox.BeginUpdate();
modulesComboBox.Items.Clear();
foreach (Module module in debugger.ModuleList) {
modulesComboBox.Items.Add("Module A");
}
modulesComboBox.EndUpdate();
}
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -23,11 +23,45 @@
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.modulesListView = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.SuspendLayout();
//
// modulesListView
//
this.modulesListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.modulesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2,
this.columnHeader3});
this.modulesListView.Location = new System.Drawing.Point(12, 12);
this.modulesListView.Name = "modulesListView";
this.modulesListView.Size = new System.Drawing.Size(748, 206);
this.modulesListView.TabIndex = 0;
this.modulesListView.UseCompatibleStateImageBehavior = false;
this.modulesListView.View = System.Windows.Forms.View.Details;
//
// ModulesPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(772, 230);
this.Controls.Add(this.modulesListView);
this.Name = "ModulesPanel";
this.Text = "Modules";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListView modulesListView;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ColumnHeader columnHeader3;
}
}

View File

@ -17,6 +17,18 @@ namespace Xenia.Debug.UI.Views {
public ModulesPanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
debugger.ModuleList.Changed += UpdateModulesList;
UpdateModulesList();
}
private void UpdateModulesList() {
modulesListView.BeginUpdate();
modulesListView.Items.Clear();
foreach (Module module in debugger.ModuleList) {
modulesListView.Items.Add("Module A");
}
modulesListView.EndUpdate();
}
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -23,11 +23,45 @@
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.threadsListView = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.SuspendLayout();
//
// threadsListView
//
this.threadsListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.threadsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2,
this.columnHeader3});
this.threadsListView.Location = new System.Drawing.Point(12, 12);
this.threadsListView.Name = "threadsListView";
this.threadsListView.Size = new System.Drawing.Size(731, 287);
this.threadsListView.TabIndex = 1;
this.threadsListView.UseCompatibleStateImageBehavior = false;
this.threadsListView.View = System.Windows.Forms.View.Details;
//
// ThreadsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(755, 311);
this.Controls.Add(this.threadsListView);
this.Name = "ThreadsPanel";
this.Text = "Threads";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListView threadsListView;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ColumnHeader columnHeader3;
}
}

View File

@ -17,6 +17,18 @@ namespace Xenia.Debug.UI.Views {
public ThreadsPanel(Debugger debugger) {
InitializeComponent();
this.debugger = debugger;
debugger.ThreadList.Changed += UpdateThreadList;
UpdateThreadList();
}
private void UpdateThreadList() {
threadsListView.BeginUpdate();
threadsListView.Items.Clear();
foreach (Thread thread in debugger.ThreadList) {
threadsListView.Items.Add("Thread A");
}
threadsListView.EndUpdate();
}
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -160,7 +160,26 @@
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="Views\BreakpointsPanel.resx">
<DependentUpon>BreakpointsPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Views\CallstackPanel.resx">
<DependentUpon>CallstackPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Views\CodeDocument.resx">
<DependentUpon>CodeDocument.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Views\FunctionsPanel.resx">
<DependentUpon>FunctionsPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Views\ModulesPanel.resx">
<DependentUpon>ModulesPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Views\ThreadsPanel.resx">
<DependentUpon>ThreadsPanel.cs</DependentUpon>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
@ -184,6 +203,14 @@
<Name>Xenia.Debug</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="Resources\pause.png" />
<Content Include="Resources\play.png" />
<Content Include="Resources\step_in.bmp" />
<Content Include="Resources\step_out.bmp" />
<Content Include="Resources\step_over.bmp" />
<Content Include="Resources\stop.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -6,5 +6,14 @@ using System.Threading.Tasks;
namespace Xenia.Debug {
public class Callstack {
public class Frame {
// function
// address
// stack pointer
// possible to get args?
}
// thread
// frames
}
}

View File

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public enum RunState {
Updating,
Running,
Paused,
}
public class Context : Changeable {
private readonly Debugger debugger;
public Context(Debugger debugger) {
this.debugger = debugger;
}
public RunState RunState {
get; private set;
}
public void SetRunState(RunState runState) {
if (RunState == runState) {
return;
}
RunState = runState;
OnChanged();
}
public uint CurrentThreadId {
get; private set;
}
public void SetThreadId(uint threadId) {
if (CurrentThreadId == threadId) {
return;
}
CurrentThreadId = threadId;
OnChanged();
}
}
}

View File

@ -35,16 +35,13 @@ namespace Xenia.Debug {
private uint nextRequestId = 1;
private FileMappingHandle memoryHandle;
public IntPtr Membase {
get;
}
public unsafe byte* TranslateVirtual(uint address) {
return (byte*)Membase.ToPointer() + address;
return (byte*)Memory.VirtualMembase.ToPointer() + address;
}
public unsafe byte* TranslatePhysical(uint address) {
return (byte*)Membase.ToPointer() + 0xFFFFFFFF + address;
return (byte*)Memory.PhysicalMembase.ToPointer() + 0xFFFFFFFF + address;
}
public event EventHandler<State> StateChanged;
@ -54,30 +51,22 @@ namespace Xenia.Debug {
}
= State.Idle;
public BreakpointList BreakpointList {
get;
}
public FunctionList FunctionList {
get;
}
public Memory Memory {
get;
}
public ModuleList ModuleList {
get;
}
public ThreadList ThreadList {
get;
}
public readonly Context CurrentContext;
public readonly BreakpointList BreakpointList;
public readonly Memory Memory;
public readonly ModuleList ModuleList;
public readonly ThreadList ThreadList;
public Debugger(AsyncTaskRunner asyncTaskRunner) {
Dispatch.AsyncTaskRunner = asyncTaskRunner;
this.BreakpointList = new BreakpointList(this);
this.FunctionList = new FunctionList(this);
this.Memory = new Memory(this);
this.ModuleList = new ModuleList(this);
this.ThreadList = new ThreadList(this);
this.CurrentContext = new Context(this);
}
public Task Attach() {
@ -91,8 +80,7 @@ namespace Xenia.Debug {
NetworkAccess.Connect,
TransportType.Tcp,
kServerHostname,
kServerPort
);
kServerPort);
permission.Demand();
IPAddress ipAddress = new IPAddress(new byte[] { 127, 0, 0, 1 });
@ -282,5 +270,96 @@ namespace Xenia.Debug {
StateChanged(this, newState);
}
}
private async Task BeginRunStateTransition() {
CurrentContext.SetRunState(RunState.Updating);
}
private async Task CompleteRunStateTransition(RunState newRunState) {
await Task.WhenAll(new Task[] {
ModuleList.Invalidate(),
});
CurrentContext.SetRunState(newRunState);
}
public async Task<StopResponse> Stop() {
await BeginRunStateTransition();
var fbb = BeginRequest();
StopRequest.StartStopRequest(fbb);
int requestDataOffset = StopRequest.EndStopRequest(fbb);
var response = await CommitRequest(fbb, RequestData.StopRequest, requestDataOffset);
System.Diagnostics.Debug.Assert(response.ResponseDataType ==
ResponseData.StopResponse);
var stopResponse = new StopResponse();
response.GetResponseData(stopResponse);
await CompleteRunStateTransition(RunState.Paused);
return stopResponse;
}
public async Task<BreakResponse> Break() {
await BeginRunStateTransition();
var fbb = BeginRequest();
BreakRequest.StartBreakRequest(fbb);
int requestDataOffset = BreakRequest.EndBreakRequest(fbb);
var response = await CommitRequest(fbb, RequestData.BreakRequest, requestDataOffset);
System.Diagnostics.Debug.Assert(response.ResponseDataType ==
ResponseData.BreakResponse);
var breakResponse = new BreakResponse();
response.GetResponseData(breakResponse);
await CompleteRunStateTransition(RunState.Paused);
return breakResponse;
}
public async Task<ContinueResponse> Continue() {
await BeginRunStateTransition();
var fbb = BeginRequest();
int requestDataOffset = ContinueRequest.CreateContinueRequest(fbb, ContinueAction.Continue, 0);
var response = await CommitRequest(fbb, RequestData.ContinueRequest, requestDataOffset);
System.Diagnostics.Debug.Assert(response.ResponseDataType ==
ResponseData.ContinueResponse);
var continueResponse = new ContinueResponse();
response.GetResponseData(continueResponse);
await CompleteRunStateTransition(RunState.Running);
return continueResponse;
}
public async Task<ContinueResponse> ContinueTo(uint targetAddress) {
await BeginRunStateTransition();
var fbb = BeginRequest();
int requestDataOffset = ContinueRequest.CreateContinueRequest(fbb, ContinueAction.ContinueTo, targetAddress);
var response = await CommitRequest(fbb, RequestData.ContinueRequest, requestDataOffset);
System.Diagnostics.Debug.Assert(response.ResponseDataType ==
ResponseData.ContinueResponse);
var continueResponse = new ContinueResponse();
response.GetResponseData(continueResponse);
await CompleteRunStateTransition(RunState.Running);
return continueResponse;
}
public async Task<StepResponse> StepIn() {
return await Step(StepAction.StepIn, CurrentContext.CurrentThreadId);
}
public async Task<StepResponse> StepOver() {
return await Step(StepAction.StepOver, CurrentContext.CurrentThreadId);
}
public async Task<StepResponse> StepOut() {
return await Step(StepAction.StepOut, CurrentContext.CurrentThreadId);
}
private async Task<StepResponse> Step(StepAction stepAction, uint threadId) {
await BeginRunStateTransition();
var fbb = BeginRequest();
int requestDataOffset = StepRequest.CreateStepRequest(fbb, stepAction, threadId);
var response = await CommitRequest(fbb, RequestData.StepRequest, requestDataOffset);
System.Diagnostics.Debug.Assert(response.ResponseDataType ==
ResponseData.StepResponse);
var stepResponse = new StepResponse();
response.GetResponseData(stepResponse);
await CompleteRunStateTransition(RunState.Paused);
return stepResponse;
}
}
}

View File

@ -7,5 +7,27 @@ using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class Function : Changeable {
// status: declared, defined, failed
// module
// name
// startAddress
// endAddress
// behavior: default, prolog, epilog, epilog_return, extern
// extern info?
// source map
// disasm:
// source
// raw hir
// hir
// machine code
// trace data:
// intptr into file mapping
// function_thread_use bitmask
// call count
// caller history
// instruction execution counts
}
}

View File

@ -1,32 +0,0 @@
using System;
using System.Collections;
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, IReadOnlyCollection<Function> {
private readonly Debugger debugger;
private readonly List<Function> functions = new List<Function>();
public FunctionList(Debugger debugger) {
this.debugger = debugger;
}
public int Count {
get {
return functions.Count;
}
}
public IEnumerator<Function> GetEnumerator() {
return functions.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() {
return functions.GetEnumerator();
}
}
}

View File

@ -0,0 +1,18 @@
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 KernelObject : Changeable {
public readonly Debugger Debugger;
public readonly uint Handle;
public KernelObject(Debugger debugger, uint handle) {
this.Debugger = debugger;
this.Handle = handle;
}
}
}

View File

@ -12,5 +12,17 @@ namespace Xenia.Debug {
public MemoryView(Memory memory) {
this.memory = memory;
}
// startAddress
// endAddress
// padding: 2 64k pages on each side?
// history (last N snapshots)
// snapshot on break, or manually
// colored: text on modification
// bg on heap alloc #
// focus details: protection, region, allocation
// stacks for all allocations
}
}

View File

@ -1,11 +1,48 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using xe.debug.proto;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class Module : Changeable {
public class Module : KernelObject, IReadOnlyCollection<Function> {
private readonly List<Function> functions = new List<Function>();
// xobject: handle
// path
// type: user, kernel
// if user:
// xex header?
public Module(Debugger debugger, uint moduleHandle) : base(debugger, moduleHandle) {
}
public async Task Invalidate() {
var fbb = Debugger.BeginRequest();
int requestDataOffset = GetModuleRequest.CreateGetModuleRequest(fbb, Handle);
var response = await Debugger.CommitRequest(
fbb, RequestData.GetModuleRequest, requestDataOffset);
GetModuleResponse responseData = new GetModuleResponse();
response.GetResponseData(responseData);
//
}
public int Count {
get {
return functions.Count;
}
}
public IEnumerator<Function> GetEnumerator() {
return functions.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() {
return functions.GetEnumerator();
}
}
}

View File

@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using xe.debug.proto;
using Xenia.Debug.Utilities;
namespace Xenia.Debug {
@ -15,6 +16,32 @@ namespace Xenia.Debug {
this.debugger = debugger;
}
public async Task Invalidate() {
var fbb = debugger.BeginRequest();
ListModulesRequest.StartListModulesRequest(fbb);
int requestDataOffset = ListModulesRequest.EndListModulesRequest(fbb);
var response = await debugger.CommitRequest(
fbb, RequestData.ListModulesRequest, requestDataOffset);
ListModulesResponse responseData = new ListModulesResponse();
response.GetResponseData(responseData);
var pendingTasks = new List<Task>();
for (int i = 0; i < responseData.ModuleIdsLength; ++i) {
uint moduleHandle = responseData.GetModuleIds(i);
var module = modules.Find((m) => m.Handle == moduleHandle);
if (module == null) {
// Module not found.
module = new Module(debugger, moduleHandle);
pendingTasks.Add(module.Invalidate());
} else {
// Module already present.
// Modules are immutable, so ignore?
}
}
await Task.WhenAll(pendingTasks);
}
public int Count {
get {
return modules.Count;

View File

@ -0,0 +1,35 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class AccessViolationEvent : Table {
public static AccessViolationEvent GetRootAsAccessViolationEvent(ByteBuffer _bb) { return GetRootAsAccessViolationEvent(_bb, new AccessViolationEvent()); }
public static AccessViolationEvent GetRootAsAccessViolationEvent(ByteBuffer _bb, AccessViolationEvent obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public AccessViolationEvent __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public uint ThreadId { get { int o = __offset(4); return o != 0 ? bb.GetUint(o + bb_pos) : (uint)0; } }
public uint TargetAddress { get { int o = __offset(6); return o != 0 ? bb.GetUint(o + bb_pos) : (uint)0; } }
public static int CreateAccessViolationEvent(FlatBufferBuilder builder,
uint thread_id = 0,
uint target_address = 0) {
builder.StartObject(2);
AccessViolationEvent.AddTargetAddress(builder, target_address);
AccessViolationEvent.AddThreadId(builder, thread_id);
return AccessViolationEvent.EndAccessViolationEvent(builder);
}
public static void StartAccessViolationEvent(FlatBufferBuilder builder) { builder.StartObject(2); }
public static void AddThreadId(FlatBufferBuilder builder, uint threadId) { builder.AddUint(0, threadId, 0); }
public static void AddTargetAddress(FlatBufferBuilder builder, uint targetAddress) { builder.AddUint(1, targetAddress, 0); }
public static int EndAccessViolationEvent(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -1,22 +0,0 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class AddBreakpointRequest : Table {
public static AddBreakpointRequest GetRootAsAddBreakpointRequest(ByteBuffer _bb) { return GetRootAsAddBreakpointRequest(_bb, new AddBreakpointRequest()); }
public static AddBreakpointRequest GetRootAsAddBreakpointRequest(ByteBuffer _bb, AddBreakpointRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public AddBreakpointRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartAddBreakpointRequest(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndAddBreakpointRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -1,22 +0,0 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class AddBreakpointResponse : Table {
public static AddBreakpointResponse GetRootAsAddBreakpointResponse(ByteBuffer _bb) { return GetRootAsAddBreakpointResponse(_bb, new AddBreakpointResponse()); }
public static AddBreakpointResponse GetRootAsAddBreakpointResponse(ByteBuffer _bb, AddBreakpointResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public AddBreakpointResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartAddBreakpointResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndAddBreakpointResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,34 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class AddBreakpointsRequest : Table {
public static AddBreakpointsRequest GetRootAsAddBreakpointsRequest(ByteBuffer _bb) { return GetRootAsAddBreakpointsRequest(_bb, new AddBreakpointsRequest()); }
public static AddBreakpointsRequest GetRootAsAddBreakpointsRequest(ByteBuffer _bb, AddBreakpointsRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public AddBreakpointsRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public Breakpoint GetBreakpoints(int j) { return GetBreakpoints(new Breakpoint(), j); }
public Breakpoint GetBreakpoints(Breakpoint obj, int j) { int o = __offset(4); return o != 0 ? obj.__init(__vector(o) + j * 4, bb) : null; }
public int BreakpointsLength { get { int o = __offset(4); return o != 0 ? __vector_len(o) : 0; } }
public static int CreateAddBreakpointsRequest(FlatBufferBuilder builder,
int breakpoints = 0) {
builder.StartObject(1);
AddBreakpointsRequest.AddBreakpoints(builder, breakpoints);
return AddBreakpointsRequest.EndAddBreakpointsRequest(builder);
}
public static void StartAddBreakpointsRequest(FlatBufferBuilder builder) { builder.StartObject(1); }
public static void AddBreakpoints(FlatBufferBuilder builder, int breakpointsOffset) { builder.AddOffset(0, breakpointsOffset, 0); }
public static void StartBreakpointsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
public static int EndAddBreakpointsRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class AddBreakpointsResponse : Table {
public static AddBreakpointsResponse GetRootAsAddBreakpointsResponse(ByteBuffer _bb) { return GetRootAsAddBreakpointsResponse(_bb, new AddBreakpointsResponse()); }
public static AddBreakpointsResponse GetRootAsAddBreakpointsResponse(ByteBuffer _bb, AddBreakpointsResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public AddBreakpointsResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartAddBreakpointsResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndAddBreakpointsResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class BreakRequest : Table {
public static BreakRequest GetRootAsBreakRequest(ByteBuffer _bb) { return GetRootAsBreakRequest(_bb, new BreakRequest()); }
public static BreakRequest GetRootAsBreakRequest(ByteBuffer _bb, BreakRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public BreakRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartBreakRequest(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndBreakRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class BreakResponse : Table {
public static BreakResponse GetRootAsBreakResponse(ByteBuffer _bb) { return GetRootAsBreakResponse(_bb, new BreakResponse()); }
public static BreakResponse GetRootAsBreakResponse(ByteBuffer _bb, BreakResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public BreakResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartBreakResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndBreakResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,21 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class Breakpoint : Struct {
public Breakpoint __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public uint BreakpointId { get { return bb.GetUint(bb_pos + 0); } }
public static int CreateBreakpoint(FlatBufferBuilder builder, uint BreakpointId) {
builder.Prep(4, 4);
builder.PutUint(BreakpointId);
return builder.Offset;
}
};
}

View File

@ -0,0 +1,35 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class BreakpointEvent : Table {
public static BreakpointEvent GetRootAsBreakpointEvent(ByteBuffer _bb) { return GetRootAsBreakpointEvent(_bb, new BreakpointEvent()); }
public static BreakpointEvent GetRootAsBreakpointEvent(ByteBuffer _bb, BreakpointEvent obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public BreakpointEvent __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public uint ThreadId { get { int o = __offset(4); return o != 0 ? bb.GetUint(o + bb_pos) : (uint)0; } }
public uint BreakpointId { get { int o = __offset(6); return o != 0 ? bb.GetUint(o + bb_pos) : (uint)0; } }
public static int CreateBreakpointEvent(FlatBufferBuilder builder,
uint thread_id = 0,
uint breakpoint_id = 0) {
builder.StartObject(2);
BreakpointEvent.AddBreakpointId(builder, breakpoint_id);
BreakpointEvent.AddThreadId(builder, thread_id);
return BreakpointEvent.EndBreakpointEvent(builder);
}
public static void StartBreakpointEvent(FlatBufferBuilder builder) { builder.StartObject(2); }
public static void AddThreadId(FlatBufferBuilder builder, uint threadId) { builder.AddUint(0, threadId, 0); }
public static void AddBreakpointId(FlatBufferBuilder builder, uint breakpointId) { builder.AddUint(1, breakpointId, 0); }
public static int EndBreakpointEvent(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,13 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
public enum ContinueAction : sbyte
{
Continue = 0,
ContinueTo = 1,
};
}

View File

@ -0,0 +1,35 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class ContinueRequest : Table {
public static ContinueRequest GetRootAsContinueRequest(ByteBuffer _bb) { return GetRootAsContinueRequest(_bb, new ContinueRequest()); }
public static ContinueRequest GetRootAsContinueRequest(ByteBuffer _bb, ContinueRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public ContinueRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public ContinueAction Action { get { int o = __offset(4); return o != 0 ? (ContinueAction)bb.GetSbyte(o + bb_pos) : (ContinueAction)0; } }
public uint TargetAddress { get { int o = __offset(6); return o != 0 ? bb.GetUint(o + bb_pos) : (uint)0; } }
public static int CreateContinueRequest(FlatBufferBuilder builder,
ContinueAction action = 0,
uint target_address = 0) {
builder.StartObject(2);
ContinueRequest.AddTargetAddress(builder, target_address);
ContinueRequest.AddAction(builder, action);
return ContinueRequest.EndContinueRequest(builder);
}
public static void StartContinueRequest(FlatBufferBuilder builder) { builder.StartObject(2); }
public static void AddAction(FlatBufferBuilder builder, ContinueAction action) { builder.AddSbyte(0, (sbyte)(action), 0); }
public static void AddTargetAddress(FlatBufferBuilder builder, uint targetAddress) { builder.AddUint(1, targetAddress, 0); }
public static int EndContinueRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class ContinueResponse : Table {
public static ContinueResponse GetRootAsContinueResponse(ByteBuffer _bb) { return GetRootAsContinueResponse(_bb, new ContinueResponse()); }
public static ContinueResponse GetRootAsContinueResponse(ByteBuffer _bb, ContinueResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public ContinueResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartContinueResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndContinueResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,31 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class GetModuleRequest : Table {
public static GetModuleRequest GetRootAsGetModuleRequest(ByteBuffer _bb) { return GetRootAsGetModuleRequest(_bb, new GetModuleRequest()); }
public static GetModuleRequest GetRootAsGetModuleRequest(ByteBuffer _bb, GetModuleRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public GetModuleRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public uint ModuleId { get { int o = __offset(4); return o != 0 ? bb.GetUint(o + bb_pos) : (uint)0; } }
public static int CreateGetModuleRequest(FlatBufferBuilder builder,
uint module_id = 0) {
builder.StartObject(1);
GetModuleRequest.AddModuleId(builder, module_id);
return GetModuleRequest.EndGetModuleRequest(builder);
}
public static void StartGetModuleRequest(FlatBufferBuilder builder) { builder.StartObject(1); }
public static void AddModuleId(FlatBufferBuilder builder, uint moduleId) { builder.AddUint(0, moduleId, 0); }
public static int EndGetModuleRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,32 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class GetModuleResponse : Table {
public static GetModuleResponse GetRootAsGetModuleResponse(ByteBuffer _bb) { return GetRootAsGetModuleResponse(_bb, new GetModuleResponse()); }
public static GetModuleResponse GetRootAsGetModuleResponse(ByteBuffer _bb, GetModuleResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public GetModuleResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public Module Module { get { return GetModule(new Module()); } }
public Module GetModule(Module obj) { int o = __offset(4); return o != 0 ? obj.__init(__indirect(o + bb_pos), bb) : null; }
public static int CreateGetModuleResponse(FlatBufferBuilder builder,
int module = 0) {
builder.StartObject(1);
GetModuleResponse.AddModule(builder, module);
return GetModuleResponse.EndGetModuleResponse(builder);
}
public static void StartGetModuleResponse(FlatBufferBuilder builder) { builder.StartObject(1); }
public static void AddModule(FlatBufferBuilder builder, int moduleOffset) { builder.AddOffset(0, moduleOffset, 0); }
public static int EndGetModuleResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -10,8 +10,20 @@ public sealed class ListBreakpointsResponse : Table {
public static ListBreakpointsResponse GetRootAsListBreakpointsResponse(ByteBuffer _bb, ListBreakpointsResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public ListBreakpointsResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public Breakpoint GetBreakpoints(int j) { return GetBreakpoints(new Breakpoint(), j); }
public Breakpoint GetBreakpoints(Breakpoint obj, int j) { int o = __offset(4); return o != 0 ? obj.__init(__vector(o) + j * 4, bb) : null; }
public int BreakpointsLength { get { int o = __offset(4); return o != 0 ? __vector_len(o) : 0; } }
public static void StartListBreakpointsResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int CreateListBreakpointsResponse(FlatBufferBuilder builder,
int breakpoints = 0) {
builder.StartObject(1);
ListBreakpointsResponse.AddBreakpoints(builder, breakpoints);
return ListBreakpointsResponse.EndListBreakpointsResponse(builder);
}
public static void StartListBreakpointsResponse(FlatBufferBuilder builder) { builder.StartObject(1); }
public static void AddBreakpoints(FlatBufferBuilder builder, int breakpointsOffset) { builder.AddOffset(0, breakpointsOffset, 0); }
public static void StartBreakpointsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
public static int EndListBreakpointsResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class ListModulesRequest : Table {
public static ListModulesRequest GetRootAsListModulesRequest(ByteBuffer _bb) { return GetRootAsListModulesRequest(_bb, new ListModulesRequest()); }
public static ListModulesRequest GetRootAsListModulesRequest(ByteBuffer _bb, ListModulesRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public ListModulesRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartListModulesRequest(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndListModulesRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,34 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class ListModulesResponse : Table {
public static ListModulesResponse GetRootAsListModulesResponse(ByteBuffer _bb) { return GetRootAsListModulesResponse(_bb, new ListModulesResponse()); }
public static ListModulesResponse GetRootAsListModulesResponse(ByteBuffer _bb, ListModulesResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public ListModulesResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public uint GetModuleIds(int j) { int o = __offset(4); return o != 0 ? bb.GetUint(__vector(o) + j * 4) : (uint)0; }
public int ModuleIdsLength { get { int o = __offset(4); return o != 0 ? __vector_len(o) : 0; } }
public static int CreateListModulesResponse(FlatBufferBuilder builder,
int module_ids = 0) {
builder.StartObject(1);
ListModulesResponse.AddModuleIds(builder, module_ids);
return ListModulesResponse.EndListModulesResponse(builder);
}
public static void StartListModulesResponse(FlatBufferBuilder builder) { builder.StartObject(1); }
public static void AddModuleIds(FlatBufferBuilder builder, int moduleIdsOffset) { builder.AddOffset(0, moduleIdsOffset, 0); }
public static int CreateModuleIdsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
public static void StartModuleIdsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
public static int EndListModulesResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class ListThreadsRequest : Table {
public static ListThreadsRequest GetRootAsListThreadsRequest(ByteBuffer _bb) { return GetRootAsListThreadsRequest(_bb, new ListThreadsRequest()); }
public static ListThreadsRequest GetRootAsListThreadsRequest(ByteBuffer _bb, ListThreadsRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public ListThreadsRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartListThreadsRequest(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndListThreadsRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class ListThreadsResponse : Table {
public static ListThreadsResponse GetRootAsListThreadsResponse(ByteBuffer _bb) { return GetRootAsListThreadsResponse(_bb, new ListThreadsResponse()); }
public static ListThreadsResponse GetRootAsListThreadsResponse(ByteBuffer _bb, ListThreadsResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public ListThreadsResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartListThreadsResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndListThreadsResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,31 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class Module : Table {
public static Module GetRootAsModule(ByteBuffer _bb) { return GetRootAsModule(_bb, new Module()); }
public static Module GetRootAsModule(ByteBuffer _bb, Module obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public Module __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public XObject Object { get { return GetObject(new XObject()); } }
public XObject GetObject(XObject obj) { int o = __offset(4); return o != 0 ? obj.__init(o + bb_pos, bb) : null; }
public ModuleType Type { get { int o = __offset(6); return o != 0 ? (ModuleType)bb.GetSbyte(o + bb_pos) : (ModuleType)0; } }
public string Name { get { int o = __offset(8); return o != 0 ? __string(o + bb_pos) : null; } }
public string Path { get { int o = __offset(10); return o != 0 ? __string(o + bb_pos) : null; } }
public static void StartModule(FlatBufferBuilder builder) { builder.StartObject(4); }
public static void AddObject(FlatBufferBuilder builder, int objectOffset) { builder.AddStruct(0, objectOffset, 0); }
public static void AddType(FlatBufferBuilder builder, ModuleType type) { builder.AddSbyte(1, (sbyte)(type), 0); }
public static void AddName(FlatBufferBuilder builder, int nameOffset) { builder.AddOffset(2, nameOffset, 0); }
public static void AddPath(FlatBufferBuilder builder, int pathOffset) { builder.AddOffset(3, pathOffset, 0); }
public static int EndModule(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -3,10 +3,10 @@
namespace xe.debug.proto
{
public enum Foo : sbyte
public enum ModuleType : sbyte
{
A = 1,
B = 2,
Kernel = 0,
User = 1,
};

View File

@ -1,22 +0,0 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class RemoveBreakpointRequest : Table {
public static RemoveBreakpointRequest GetRootAsRemoveBreakpointRequest(ByteBuffer _bb) { return GetRootAsRemoveBreakpointRequest(_bb, new RemoveBreakpointRequest()); }
public static RemoveBreakpointRequest GetRootAsRemoveBreakpointRequest(ByteBuffer _bb, RemoveBreakpointRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public RemoveBreakpointRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartRemoveBreakpointRequest(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndRemoveBreakpointRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -1,22 +0,0 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class RemoveBreakpointResponse : Table {
public static RemoveBreakpointResponse GetRootAsRemoveBreakpointResponse(ByteBuffer _bb) { return GetRootAsRemoveBreakpointResponse(_bb, new RemoveBreakpointResponse()); }
public static RemoveBreakpointResponse GetRootAsRemoveBreakpointResponse(ByteBuffer _bb, RemoveBreakpointResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public RemoveBreakpointResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartRemoveBreakpointResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndRemoveBreakpointResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,34 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class RemoveBreakpointsRequest : Table {
public static RemoveBreakpointsRequest GetRootAsRemoveBreakpointsRequest(ByteBuffer _bb) { return GetRootAsRemoveBreakpointsRequest(_bb, new RemoveBreakpointsRequest()); }
public static RemoveBreakpointsRequest GetRootAsRemoveBreakpointsRequest(ByteBuffer _bb, RemoveBreakpointsRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public RemoveBreakpointsRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public Breakpoint GetBreakpoints(int j) { return GetBreakpoints(new Breakpoint(), j); }
public Breakpoint GetBreakpoints(Breakpoint obj, int j) { int o = __offset(4); return o != 0 ? obj.__init(__vector(o) + j * 4, bb) : null; }
public int BreakpointsLength { get { int o = __offset(4); return o != 0 ? __vector_len(o) : 0; } }
public static int CreateRemoveBreakpointsRequest(FlatBufferBuilder builder,
int breakpoints = 0) {
builder.StartObject(1);
RemoveBreakpointsRequest.AddBreakpoints(builder, breakpoints);
return RemoveBreakpointsRequest.EndRemoveBreakpointsRequest(builder);
}
public static void StartRemoveBreakpointsRequest(FlatBufferBuilder builder) { builder.StartObject(1); }
public static void AddBreakpoints(FlatBufferBuilder builder, int breakpointsOffset) { builder.AddOffset(0, breakpointsOffset, 0); }
public static void StartBreakpointsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
public static int EndRemoveBreakpointsRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class RemoveBreakpointsResponse : Table {
public static RemoveBreakpointsResponse GetRootAsRemoveBreakpointsResponse(ByteBuffer _bb) { return GetRootAsRemoveBreakpointsResponse(_bb, new RemoveBreakpointsResponse()); }
public static RemoveBreakpointsResponse GetRootAsRemoveBreakpointsResponse(ByteBuffer _bb, RemoveBreakpointsResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public RemoveBreakpointsResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartRemoveBreakpointsResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndRemoveBreakpointsResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -8,9 +8,15 @@ public enum RequestData : byte
NONE = 0,
AttachRequest = 1,
ListBreakpointsRequest = 2,
AddBreakpointRequest = 3,
UpdateBreakpointRequest = 4,
RemoveBreakpointRequest = 5,
AddBreakpointsRequest = 3,
UpdateBreakpointsRequest = 4,
RemoveBreakpointsRequest = 5,
ListModulesRequest = 6,
GetModuleRequest = 7,
StopRequest = 8,
BreakRequest = 9,
ContinueRequest = 10,
StepRequest = 11,
};

View File

@ -8,9 +8,17 @@ public enum ResponseData : byte
NONE = 0,
AttachResponse = 1,
ListBreakpointsResponse = 2,
AddBreakpointResponse = 3,
UpdateBreakpointResponse = 4,
RemoveBreakpointResponse = 5,
AddBreakpointsResponse = 3,
UpdateBreakpointsResponse = 4,
RemoveBreakpointsResponse = 5,
ListModulesResponse = 6,
GetModuleResponse = 7,
StopResponse = 8,
BreakResponse = 9,
ContinueResponse = 10,
StepResponse = 11,
BreakpointEvent = 12,
AccessViolationEvent = 13,
};

View File

@ -0,0 +1,14 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
public enum StepAction : sbyte
{
StepIn = 0,
StepOver = 1,
StepOut = 2,
};
}

View File

@ -0,0 +1,35 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class StepRequest : Table {
public static StepRequest GetRootAsStepRequest(ByteBuffer _bb) { return GetRootAsStepRequest(_bb, new StepRequest()); }
public static StepRequest GetRootAsStepRequest(ByteBuffer _bb, StepRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public StepRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public StepAction Action { get { int o = __offset(4); return o != 0 ? (StepAction)bb.GetSbyte(o + bb_pos) : (StepAction)0; } }
public uint ThreadId { get { int o = __offset(6); return o != 0 ? bb.GetUint(o + bb_pos) : (uint)0; } }
public static int CreateStepRequest(FlatBufferBuilder builder,
StepAction action = 0,
uint thread_id = 0) {
builder.StartObject(2);
StepRequest.AddThreadId(builder, thread_id);
StepRequest.AddAction(builder, action);
return StepRequest.EndStepRequest(builder);
}
public static void StartStepRequest(FlatBufferBuilder builder) { builder.StartObject(2); }
public static void AddAction(FlatBufferBuilder builder, StepAction action) { builder.AddSbyte(0, (sbyte)(action), 0); }
public static void AddThreadId(FlatBufferBuilder builder, uint threadId) { builder.AddUint(1, threadId, 0); }
public static int EndStepRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class StepResponse : Table {
public static StepResponse GetRootAsStepResponse(ByteBuffer _bb) { return GetRootAsStepResponse(_bb, new StepResponse()); }
public static StepResponse GetRootAsStepResponse(ByteBuffer _bb, StepResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public StepResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartStepResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndStepResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class StopRequest : Table {
public static StopRequest GetRootAsStopRequest(ByteBuffer _bb) { return GetRootAsStopRequest(_bb, new StopRequest()); }
public static StopRequest GetRootAsStopRequest(ByteBuffer _bb, StopRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public StopRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartStopRequest(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndStopRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class StopResponse : Table {
public static StopResponse GetRootAsStopResponse(ByteBuffer _bb) { return GetRootAsStopResponse(_bb, new StopResponse()); }
public static StopResponse GetRootAsStopResponse(ByteBuffer _bb, StopResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public StopResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartStopResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndStopResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -1,25 +0,0 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class StructTest : Struct {
public StructTest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public short A { get { return bb.GetShort(bb_pos + 0); } }
public sbyte B { get { return bb.GetSbyte(bb_pos + 2); } }
public Foo C { get { return (Foo)bb.GetSbyte(bb_pos + 3); } }
public static int CreateStructTest(FlatBufferBuilder builder, short A, sbyte B, Foo C) {
builder.Prep(2, 4);
builder.PutSbyte((sbyte)(C));
builder.PutSbyte(B);
builder.PutShort(A);
return builder.Offset;
}
};
}

View File

@ -1,35 +0,0 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class TableTest : Table {
public static TableTest GetRootAsTableTest(ByteBuffer _bb) { return GetRootAsTableTest(_bb, new TableTest()); }
public static TableTest GetRootAsTableTest(ByteBuffer _bb, TableTest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public TableTest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public StructTest St { get { return GetSt(new StructTest()); } }
public StructTest GetSt(StructTest obj) { int o = __offset(4); return o != 0 ? obj.__init(o + bb_pos, bb) : null; }
public byte GetIv(int j) { int o = __offset(6); return o != 0 ? bb.Get(__vector(o) + j * 1) : (byte)0; }
public int IvLength { get { int o = __offset(6); return o != 0 ? __vector_len(o) : 0; } }
public string Name { get { int o = __offset(8); return o != 0 ? __string(o + bb_pos) : null; } }
public uint Id { get { int o = __offset(10); return o != 0 ? bb.GetUint(o + bb_pos) : (uint)0; } }
public static void StartTableTest(FlatBufferBuilder builder) { builder.StartObject(4); }
public static void AddSt(FlatBufferBuilder builder, int stOffset) { builder.AddStruct(0, stOffset, 0); }
public static void AddIv(FlatBufferBuilder builder, int ivOffset) { builder.AddOffset(1, ivOffset, 0); }
public static int CreateIvVector(FlatBufferBuilder builder, byte[] data) { builder.StartVector(1, data.Length, 1); for (int i = data.Length - 1; i >= 0; i--) builder.AddByte(data[i]); return builder.EndVector(); }
public static void StartIvVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(1, numElems, 1); }
public static void AddName(FlatBufferBuilder builder, int nameOffset) { builder.AddOffset(2, nameOffset, 0); }
public static void AddId(FlatBufferBuilder builder, uint id) { builder.AddUint(3, id, 0); }
public static int EndTableTest(FlatBufferBuilder builder) {
int o = builder.EndObject();
builder.Required(o, 8); // name
return o;
}
};
}

View File

@ -0,0 +1,27 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class Thread : Table {
public static Thread GetRootAsThread(ByteBuffer _bb) { return GetRootAsThread(_bb, new Thread()); }
public static Thread GetRootAsThread(ByteBuffer _bb, Thread obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public Thread __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public XObject Object { get { return GetObject(new XObject()); } }
public XObject GetObject(XObject obj) { int o = __offset(4); return o != 0 ? obj.__init(o + bb_pos, bb) : null; }
public ThreadType Type { get { int o = __offset(6); return o != 0 ? (ThreadType)bb.GetSbyte(o + bb_pos) : (ThreadType)0; } }
public static void StartThread(FlatBufferBuilder builder) { builder.StartObject(2); }
public static void AddObject(FlatBufferBuilder builder, int objectOffset) { builder.AddStruct(0, objectOffset, 0); }
public static void AddType(FlatBufferBuilder builder, ThreadType type) { builder.AddSbyte(1, (sbyte)(type), 0); }
public static int EndThread(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,13 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
public enum ThreadType : sbyte
{
Kernel = 0,
User = 1,
};
}

View File

@ -1,22 +0,0 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class UpdateBreakpointRequest : Table {
public static UpdateBreakpointRequest GetRootAsUpdateBreakpointRequest(ByteBuffer _bb) { return GetRootAsUpdateBreakpointRequest(_bb, new UpdateBreakpointRequest()); }
public static UpdateBreakpointRequest GetRootAsUpdateBreakpointRequest(ByteBuffer _bb, UpdateBreakpointRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public UpdateBreakpointRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartUpdateBreakpointRequest(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndUpdateBreakpointRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -1,22 +0,0 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class UpdateBreakpointResponse : Table {
public static UpdateBreakpointResponse GetRootAsUpdateBreakpointResponse(ByteBuffer _bb) { return GetRootAsUpdateBreakpointResponse(_bb, new UpdateBreakpointResponse()); }
public static UpdateBreakpointResponse GetRootAsUpdateBreakpointResponse(ByteBuffer _bb, UpdateBreakpointResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public UpdateBreakpointResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartUpdateBreakpointResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndUpdateBreakpointResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,34 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class UpdateBreakpointsRequest : Table {
public static UpdateBreakpointsRequest GetRootAsUpdateBreakpointsRequest(ByteBuffer _bb) { return GetRootAsUpdateBreakpointsRequest(_bb, new UpdateBreakpointsRequest()); }
public static UpdateBreakpointsRequest GetRootAsUpdateBreakpointsRequest(ByteBuffer _bb, UpdateBreakpointsRequest obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public UpdateBreakpointsRequest __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public Breakpoint GetBreakpoints(int j) { return GetBreakpoints(new Breakpoint(), j); }
public Breakpoint GetBreakpoints(Breakpoint obj, int j) { int o = __offset(4); return o != 0 ? obj.__init(__vector(o) + j * 4, bb) : null; }
public int BreakpointsLength { get { int o = __offset(4); return o != 0 ? __vector_len(o) : 0; } }
public static int CreateUpdateBreakpointsRequest(FlatBufferBuilder builder,
int breakpoints = 0) {
builder.StartObject(1);
UpdateBreakpointsRequest.AddBreakpoints(builder, breakpoints);
return UpdateBreakpointsRequest.EndUpdateBreakpointsRequest(builder);
}
public static void StartUpdateBreakpointsRequest(FlatBufferBuilder builder) { builder.StartObject(1); }
public static void AddBreakpoints(FlatBufferBuilder builder, int breakpointsOffset) { builder.AddOffset(0, breakpointsOffset, 0); }
public static void StartBreakpointsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
public static int EndUpdateBreakpointsRequest(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,22 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class UpdateBreakpointsResponse : Table {
public static UpdateBreakpointsResponse GetRootAsUpdateBreakpointsResponse(ByteBuffer _bb) { return GetRootAsUpdateBreakpointsResponse(_bb, new UpdateBreakpointsResponse()); }
public static UpdateBreakpointsResponse GetRootAsUpdateBreakpointsResponse(ByteBuffer _bb, UpdateBreakpointsResponse obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public UpdateBreakpointsResponse __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public static void StartUpdateBreakpointsResponse(FlatBufferBuilder builder) { builder.StartObject(0); }
public static int EndUpdateBreakpointsResponse(FlatBufferBuilder builder) {
int o = builder.EndObject();
return o;
}
};
}

View File

@ -0,0 +1,21 @@
// automatically generated, do not modify
namespace xe.debug.proto
{
using FlatBuffers;
public sealed class XObject : Struct {
public XObject __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
public uint Handle { get { return bb.GetUint(bb_pos + 0); } }
public static int CreateXObject(FlatBufferBuilder builder, uint Handle) {
builder.Prep(4, 4);
builder.PutUint(Handle);
return builder.Offset;
}
};
}

View File

@ -7,8 +7,39 @@ using Xenia.Debug.Utilities;
namespace Xenia.Debug {
public class ThreadContext {
// Maps to ppc_context.h:
// r[32]
// f[32]
// v[128]
// lr
// ctr
// xer
// crN?
// fpscr
}
public class Thread : Changeable {
public class Thread : KernelObject {
// xobject: handle
// module?
// pcr address
// thread state address
// tls address
// stack address, size
// thread id
// name
// IsAlive
// priority
// affinity
// state: running, suspended, waiting
// creation params:
// stack size
// xapi thread startup fn
// start address fn
// start context
// creation flags
// callstack at creation
public Thread(Debugger debugger, uint threadHandle) : base(debugger, threadHandle) {
}
}
}

View File

@ -63,29 +63,53 @@
<Compile Include="Breakpoint.cs" />
<Compile Include="BreakpointList.cs" />
<Compile Include="Callstack.cs" />
<Compile Include="Context.cs" />
<Compile Include="Debugger.cs" />
<Compile Include="Function.cs" />
<Compile Include="FunctionList.cs" />
<Compile Include="KernelObject.cs" />
<Compile Include="Memory.cs" />
<Compile Include="MemoryView.cs" />
<Compile Include="Module.cs" />
<Compile Include="ModuleList.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Proto\xe\debug\proto\AddBreakpointRequest.cs" />
<Compile Include="Proto\xe\debug\proto\AddBreakpointResponse.cs" />
<Compile Include="Proto\xe\debug\proto\AccessViolationEvent.cs" />
<Compile Include="Proto\xe\debug\proto\AddBreakpointsRequest.cs" />
<Compile Include="Proto\xe\debug\proto\AddBreakpointsResponse.cs" />
<Compile Include="Proto\xe\debug\proto\AttachRequest.cs" />
<Compile Include="Proto\xe\debug\proto\AttachResponse.cs" />
<Compile Include="Proto\xe\debug\proto\Foo.cs" />
<Compile Include="Proto\xe\debug\proto\Breakpoint.cs" />
<Compile Include="Proto\xe\debug\proto\BreakpointEvent.cs" />
<Compile Include="Proto\xe\debug\proto\BreakRequest.cs" />
<Compile Include="Proto\xe\debug\proto\BreakResponse.cs" />
<Compile Include="Proto\xe\debug\proto\ContinueAction.cs" />
<Compile Include="Proto\xe\debug\proto\ContinueRequest.cs" />
<Compile Include="Proto\xe\debug\proto\ContinueResponse.cs" />
<Compile Include="Proto\xe\debug\proto\GetModuleRequest.cs" />
<Compile Include="Proto\xe\debug\proto\GetModuleResponse.cs" />
<Compile Include="Proto\xe\debug\proto\ListBreakpointsRequest.cs" />
<Compile Include="Proto\xe\debug\proto\ListBreakpointsResponse.cs" />
<Compile Include="Proto\xe\debug\proto\RemoveBreakpointRequest.cs" />
<Compile Include="Proto\xe\debug\proto\RemoveBreakpointResponse.cs" />
<Compile Include="Proto\xe\debug\proto\ListModulesRequest.cs" />
<Compile Include="Proto\xe\debug\proto\ListModulesResponse.cs" />
<Compile Include="Proto\xe\debug\proto\ListThreadsRequest.cs" />
<Compile Include="Proto\xe\debug\proto\ListThreadsResponse.cs" />
<Compile Include="Proto\xe\debug\proto\Module.cs" />
<Compile Include="Proto\xe\debug\proto\ModuleType.cs" />
<Compile Include="Proto\xe\debug\proto\RemoveBreakpointsRequest.cs" />
<Compile Include="Proto\xe\debug\proto\RemoveBreakpointsResponse.cs" />
<Compile Include="Proto\xe\debug\proto\Request.cs" />
<Compile Include="Proto\xe\debug\proto\RequestData.cs" />
<Compile Include="Proto\xe\debug\proto\Response.cs" />
<Compile Include="Proto\xe\debug\proto\ResponseData.cs" />
<Compile Include="Proto\xe\debug\proto\StructTest.cs" />
<Compile Include="Proto\xe\debug\proto\TableTest.cs" />
<Compile Include="Proto\xe\debug\proto\StepAction.cs" />
<Compile Include="Proto\xe\debug\proto\StepRequest.cs" />
<Compile Include="Proto\xe\debug\proto\StepResponse.cs" />
<Compile Include="Proto\xe\debug\proto\StopRequest.cs" />
<Compile Include="Proto\xe\debug\proto\StopResponse.cs" />
<Compile Include="Proto\xe\debug\proto\Thread.cs" />
<Compile Include="Proto\xe\debug\proto\ThreadType.cs" />
<Compile Include="Proto\xe\debug\proto\UpdateBreakpointsRequest.cs" />
<Compile Include="Proto\xe\debug\proto\UpdateBreakpointsResponse.cs" />
<Compile Include="Proto\xe\debug\proto\XObject.cs" />
<Compile Include="Thread.cs" />
<Compile Include="ThreadList.cs" />
<Compile Include="Utilities\Changeable.cs" />

View File

@ -13,7 +13,6 @@
#include <cstddef>
#include <cstdint>
#include "xenia/debug/function_data.h"
#include "xenia/debug/function_trace_data.h"
namespace xe {

View File

@ -25,7 +25,10 @@
// Autogenerated Flatbuffers files:
#include "xenia/debug/proto/breakpoints_generated.h"
#include "xenia/debug/proto/common_generated.h"
#include "xenia/debug/proto/control_generated.h"
#include "xenia/debug/proto/messages_generated.h"
#include "xenia/debug/proto/modules_generated.h"
DEFINE_string(debug_session_path, "", "Debug output path.");
DEFINE_int32(debug_port, 19000, "Port the debugger listens on.");
@ -211,21 +214,62 @@ void Debugger::OnMessage(std::vector<uint8_t> buffer) {
//
response_data_offset = response_data.Finish().Union();
} break;
case proto::RequestData_AddBreakpointRequest: {
response_data_type = proto::ResponseData_RemoveBreakpointResponse;
auto response_data = proto::AddBreakpointResponseBuilder(fbb);
case proto::RequestData_AddBreakpointsRequest: {
response_data_type = proto::ResponseData_RemoveBreakpointsResponse;
auto response_data = proto::AddBreakpointsResponseBuilder(fbb);
//
response_data_offset = response_data.Finish().Union();
} break;
case proto::RequestData_UpdateBreakpointRequest: {
response_data_type = proto::ResponseData_UpdateBreakpointResponse;
auto response_data = proto::UpdateBreakpointResponseBuilder(fbb);
case proto::RequestData_UpdateBreakpointsRequest: {
response_data_type = proto::ResponseData_UpdateBreakpointsResponse;
auto response_data = proto::UpdateBreakpointsResponseBuilder(fbb);
//
response_data_offset = response_data.Finish().Union();
} break;
case proto::RequestData_RemoveBreakpointRequest: {
response_data_type = proto::ResponseData_AddBreakpointResponse;
auto response_data = proto::RemoveBreakpointResponseBuilder(fbb);
case proto::RequestData_RemoveBreakpointsRequest: {
response_data_type = proto::ResponseData_AddBreakpointsResponse;
auto response_data = proto::RemoveBreakpointsResponseBuilder(fbb);
//
response_data_offset = response_data.Finish().Union();
} break;
case proto::RequestData_ListModulesRequest: {
response_data_type = proto::ResponseData_ListModulesResponse;
auto response_data = proto::ListModulesResponseBuilder(fbb);
//
response_data_offset = response_data.Finish().Union();
} break;
case proto::RequestData_GetModuleRequest: {
response_data_type = proto::ResponseData_GetModuleResponse;
auto response_data = proto::GetModuleResponseBuilder(fbb);
//
response_data_offset = response_data.Finish().Union();
} break;
case proto::RequestData_StopRequest: {
response_data_type = proto::ResponseData_StopResponse;
auto response_data = proto::StopResponseBuilder(fbb);
// TODO(benvanik): gracefully die?
exit(1);
response_data_offset = response_data.Finish().Union();
} break;
case proto::RequestData_BreakRequest: {
response_data_type = proto::ResponseData_BreakResponse;
auto response_data = proto::BreakResponseBuilder(fbb);
//
SuspendAllThreads();
response_data_offset = response_data.Finish().Union();
} break;
case proto::RequestData_ContinueRequest: {
response_data_type = proto::ResponseData_ContinueResponse;
auto response_data = proto::ContinueResponseBuilder(fbb);
//
ResumeAllThreads();
response_data_offset = response_data.Finish().Union();
} break;
case proto::RequestData_StepRequest: {
response_data_type = proto::ResponseData_StepResponse;
auto response_data = proto::StepResponseBuilder(fbb);
//
response_data_offset = response_data.Finish().Union();
} break;

View File

@ -1,81 +0,0 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_DEBUG_FUNCTION_DATA_H_
#define XENIA_DEBUG_FUNCTION_DATA_H_
#include <cstdint>
#include "xenia/base/memory.h"
namespace xe {
namespace debug {
class FunctionData {
public:
struct Header {
// Format is used by tooling, changes must be made across all targets.
// + 0 4b (data size)
// + 4 4b start_address
// + 8 4b end_address
// +12 4b type (user, external, etc)
// +16 4b source_map_entry_count
//
// +20 4b source_disasm_length
// +20 4b raw_hir_disasm_length
// +20 4b hir_disasm_length
// +20 4b machine_code_disasm_length
// +20 12b* source_map_entries
uint32_t data_size;
uint32_t start_address;
uint32_t end_address;
uint32_t type;
/*
source_map_count
source_map[] : {ppc_address, hir_offset, code_offset}
raw_hir_disasm_ (len + chars)
hir_disasm_ (len + chars)
machine_code_ (len + bytes) (without tracing? regen?)
*/
};
FunctionData() : header_(nullptr) {}
void Reset(uint8_t* trace_data, size_t trace_data_size,
uint32_t start_address, uint32_t end_address) {
header_ = reinterpret_cast<Header*>(trace_data);
header_->data_size = uint32_t(trace_data_size);
header_->start_address = start_address;
header_->end_address = end_address;
header_->type = 0;
// Clear any remaining.
std::memset(trace_data + sizeof(Header), 0,
trace_data_size - sizeof(Header));
}
bool is_valid() const { return header_ != nullptr; }
uint32_t start_address() const { return header_->start_address; }
uint32_t end_address() const { return header_->end_address; }
uint32_t instruction_count() const {
return (header_->end_address - header_->start_address) / 4 + 1;
}
Header* header() const { return header_; }
static size_t SizeOfHeader() { return sizeof(Header); }
private:
Header* header_;
};
} // namespace debug
} // namespace xe
#endif // XENIA_DEBUG_FUNCTION_DATA_H_

View File

@ -2,22 +2,30 @@ include "common.fbs";
namespace xe.debug.proto;
struct Breakpoint {
breakpoint_id:uint;
}
table ListBreakpointsRequest {
}
table ListBreakpointsResponse {
breakpoints:[Breakpoint];
}
table AddBreakpointRequest {
table AddBreakpointsRequest {
breakpoints:[Breakpoint];
}
table AddBreakpointResponse {
table AddBreakpointsResponse {
}
table UpdateBreakpointRequest {
table UpdateBreakpointsRequest {
breakpoints:[Breakpoint];
}
table UpdateBreakpointResponse {
table UpdateBreakpointsResponse {
}
table RemoveBreakpointRequest {
table RemoveBreakpointsRequest {
breakpoints:[Breakpoint];
}
table RemoveBreakpointResponse {
table RemoveBreakpointsResponse {
}

View File

@ -5,19 +5,39 @@
#include "flatbuffers/flatbuffers.h"
namespace xe {
namespace debug {
namespace proto {
struct XObject;
} // namespace proto
} // namespace debug
} // namespace xe
namespace xe {
namespace debug {
namespace proto {
struct Breakpoint;
struct ListBreakpointsRequest;
struct ListBreakpointsResponse;
struct AddBreakpointRequest;
struct AddBreakpointResponse;
struct UpdateBreakpointRequest;
struct UpdateBreakpointResponse;
struct RemoveBreakpointRequest;
struct RemoveBreakpointResponse;
struct AddBreakpointsRequest;
struct AddBreakpointsResponse;
struct UpdateBreakpointsRequest;
struct UpdateBreakpointsResponse;
struct RemoveBreakpointsRequest;
struct RemoveBreakpointsResponse;
MANUALLY_ALIGNED_STRUCT(4) Breakpoint FLATBUFFERS_FINAL_CLASS {
private:
uint32_t breakpoint_id_;
public:
Breakpoint(uint32_t breakpoint_id)
: breakpoint_id_(flatbuffers::EndianScalar(breakpoint_id)) { }
uint32_t breakpoint_id() const { return flatbuffers::EndianScalar(breakpoint_id_); }
};
STRUCT_END(Breakpoint, 4);
struct ListBreakpointsRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
@ -43,8 +63,11 @@ inline flatbuffers::Offset<ListBreakpointsRequest> CreateListBreakpointsRequest(
}
struct ListBreakpointsResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
const flatbuffers::Vector<const Breakpoint *> *breakpoints() const { return GetPointer<const flatbuffers::Vector<const Breakpoint *> *>(4); }
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<flatbuffers::uoffset_t>(verifier, 4 /* breakpoints */) &&
verifier.Verify(breakpoints()) &&
verifier.EndTable();
}
};
@ -52,154 +75,175 @@ struct ListBreakpointsResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Ta
struct ListBreakpointsResponseBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
void add_breakpoints(flatbuffers::Offset<flatbuffers::Vector<const Breakpoint *>> breakpoints) { fbb_.AddOffset(4, breakpoints); }
ListBreakpointsResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
ListBreakpointsResponseBuilder &operator=(const ListBreakpointsResponseBuilder &);
flatbuffers::Offset<ListBreakpointsResponse> Finish() {
auto o = flatbuffers::Offset<ListBreakpointsResponse>(fbb_.EndTable(start_, 0));
auto o = flatbuffers::Offset<ListBreakpointsResponse>(fbb_.EndTable(start_, 1));
return o;
}
};
inline flatbuffers::Offset<ListBreakpointsResponse> CreateListBreakpointsResponse(flatbuffers::FlatBufferBuilder &_fbb) {
inline flatbuffers::Offset<ListBreakpointsResponse> CreateListBreakpointsResponse(flatbuffers::FlatBufferBuilder &_fbb,
flatbuffers::Offset<flatbuffers::Vector<const Breakpoint *>> breakpoints = 0) {
ListBreakpointsResponseBuilder builder_(_fbb);
builder_.add_breakpoints(breakpoints);
return builder_.Finish();
}
struct AddBreakpointRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
struct AddBreakpointsRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
const flatbuffers::Vector<const Breakpoint *> *breakpoints() const { return GetPointer<const flatbuffers::Vector<const Breakpoint *> *>(4); }
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<flatbuffers::uoffset_t>(verifier, 4 /* breakpoints */) &&
verifier.Verify(breakpoints()) &&
verifier.EndTable();
}
};
struct AddBreakpointsRequestBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
void add_breakpoints(flatbuffers::Offset<flatbuffers::Vector<const Breakpoint *>> breakpoints) { fbb_.AddOffset(4, breakpoints); }
AddBreakpointsRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
AddBreakpointsRequestBuilder &operator=(const AddBreakpointsRequestBuilder &);
flatbuffers::Offset<AddBreakpointsRequest> Finish() {
auto o = flatbuffers::Offset<AddBreakpointsRequest>(fbb_.EndTable(start_, 1));
return o;
}
};
inline flatbuffers::Offset<AddBreakpointsRequest> CreateAddBreakpointsRequest(flatbuffers::FlatBufferBuilder &_fbb,
flatbuffers::Offset<flatbuffers::Vector<const Breakpoint *>> breakpoints = 0) {
AddBreakpointsRequestBuilder builder_(_fbb);
builder_.add_breakpoints(breakpoints);
return builder_.Finish();
}
struct AddBreakpointsResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct AddBreakpointRequestBuilder {
struct AddBreakpointsResponseBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
AddBreakpointRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
AddBreakpointRequestBuilder &operator=(const AddBreakpointRequestBuilder &);
flatbuffers::Offset<AddBreakpointRequest> Finish() {
auto o = flatbuffers::Offset<AddBreakpointRequest>(fbb_.EndTable(start_, 0));
AddBreakpointsResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
AddBreakpointsResponseBuilder &operator=(const AddBreakpointsResponseBuilder &);
flatbuffers::Offset<AddBreakpointsResponse> Finish() {
auto o = flatbuffers::Offset<AddBreakpointsResponse>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<AddBreakpointRequest> CreateAddBreakpointRequest(flatbuffers::FlatBufferBuilder &_fbb) {
AddBreakpointRequestBuilder builder_(_fbb);
inline flatbuffers::Offset<AddBreakpointsResponse> CreateAddBreakpointsResponse(flatbuffers::FlatBufferBuilder &_fbb) {
AddBreakpointsResponseBuilder builder_(_fbb);
return builder_.Finish();
}
struct AddBreakpointResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
struct UpdateBreakpointsRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
const flatbuffers::Vector<const Breakpoint *> *breakpoints() const { return GetPointer<const flatbuffers::Vector<const Breakpoint *> *>(4); }
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<flatbuffers::uoffset_t>(verifier, 4 /* breakpoints */) &&
verifier.Verify(breakpoints()) &&
verifier.EndTable();
}
};
struct UpdateBreakpointsRequestBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
void add_breakpoints(flatbuffers::Offset<flatbuffers::Vector<const Breakpoint *>> breakpoints) { fbb_.AddOffset(4, breakpoints); }
UpdateBreakpointsRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
UpdateBreakpointsRequestBuilder &operator=(const UpdateBreakpointsRequestBuilder &);
flatbuffers::Offset<UpdateBreakpointsRequest> Finish() {
auto o = flatbuffers::Offset<UpdateBreakpointsRequest>(fbb_.EndTable(start_, 1));
return o;
}
};
inline flatbuffers::Offset<UpdateBreakpointsRequest> CreateUpdateBreakpointsRequest(flatbuffers::FlatBufferBuilder &_fbb,
flatbuffers::Offset<flatbuffers::Vector<const Breakpoint *>> breakpoints = 0) {
UpdateBreakpointsRequestBuilder builder_(_fbb);
builder_.add_breakpoints(breakpoints);
return builder_.Finish();
}
struct UpdateBreakpointsResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct AddBreakpointResponseBuilder {
struct UpdateBreakpointsResponseBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
AddBreakpointResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
AddBreakpointResponseBuilder &operator=(const AddBreakpointResponseBuilder &);
flatbuffers::Offset<AddBreakpointResponse> Finish() {
auto o = flatbuffers::Offset<AddBreakpointResponse>(fbb_.EndTable(start_, 0));
UpdateBreakpointsResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
UpdateBreakpointsResponseBuilder &operator=(const UpdateBreakpointsResponseBuilder &);
flatbuffers::Offset<UpdateBreakpointsResponse> Finish() {
auto o = flatbuffers::Offset<UpdateBreakpointsResponse>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<AddBreakpointResponse> CreateAddBreakpointResponse(flatbuffers::FlatBufferBuilder &_fbb) {
AddBreakpointResponseBuilder builder_(_fbb);
inline flatbuffers::Offset<UpdateBreakpointsResponse> CreateUpdateBreakpointsResponse(flatbuffers::FlatBufferBuilder &_fbb) {
UpdateBreakpointsResponseBuilder builder_(_fbb);
return builder_.Finish();
}
struct UpdateBreakpointRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
struct RemoveBreakpointsRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
const flatbuffers::Vector<const Breakpoint *> *breakpoints() const { return GetPointer<const flatbuffers::Vector<const Breakpoint *> *>(4); }
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<flatbuffers::uoffset_t>(verifier, 4 /* breakpoints */) &&
verifier.Verify(breakpoints()) &&
verifier.EndTable();
}
};
struct RemoveBreakpointsRequestBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
void add_breakpoints(flatbuffers::Offset<flatbuffers::Vector<const Breakpoint *>> breakpoints) { fbb_.AddOffset(4, breakpoints); }
RemoveBreakpointsRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
RemoveBreakpointsRequestBuilder &operator=(const RemoveBreakpointsRequestBuilder &);
flatbuffers::Offset<RemoveBreakpointsRequest> Finish() {
auto o = flatbuffers::Offset<RemoveBreakpointsRequest>(fbb_.EndTable(start_, 1));
return o;
}
};
inline flatbuffers::Offset<RemoveBreakpointsRequest> CreateRemoveBreakpointsRequest(flatbuffers::FlatBufferBuilder &_fbb,
flatbuffers::Offset<flatbuffers::Vector<const Breakpoint *>> breakpoints = 0) {
RemoveBreakpointsRequestBuilder builder_(_fbb);
builder_.add_breakpoints(breakpoints);
return builder_.Finish();
}
struct RemoveBreakpointsResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct UpdateBreakpointRequestBuilder {
struct RemoveBreakpointsResponseBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
UpdateBreakpointRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
UpdateBreakpointRequestBuilder &operator=(const UpdateBreakpointRequestBuilder &);
flatbuffers::Offset<UpdateBreakpointRequest> Finish() {
auto o = flatbuffers::Offset<UpdateBreakpointRequest>(fbb_.EndTable(start_, 0));
RemoveBreakpointsResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
RemoveBreakpointsResponseBuilder &operator=(const RemoveBreakpointsResponseBuilder &);
flatbuffers::Offset<RemoveBreakpointsResponse> Finish() {
auto o = flatbuffers::Offset<RemoveBreakpointsResponse>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<UpdateBreakpointRequest> CreateUpdateBreakpointRequest(flatbuffers::FlatBufferBuilder &_fbb) {
UpdateBreakpointRequestBuilder builder_(_fbb);
return builder_.Finish();
}
struct UpdateBreakpointResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct UpdateBreakpointResponseBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
UpdateBreakpointResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
UpdateBreakpointResponseBuilder &operator=(const UpdateBreakpointResponseBuilder &);
flatbuffers::Offset<UpdateBreakpointResponse> Finish() {
auto o = flatbuffers::Offset<UpdateBreakpointResponse>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<UpdateBreakpointResponse> CreateUpdateBreakpointResponse(flatbuffers::FlatBufferBuilder &_fbb) {
UpdateBreakpointResponseBuilder builder_(_fbb);
return builder_.Finish();
}
struct RemoveBreakpointRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct RemoveBreakpointRequestBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
RemoveBreakpointRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
RemoveBreakpointRequestBuilder &operator=(const RemoveBreakpointRequestBuilder &);
flatbuffers::Offset<RemoveBreakpointRequest> Finish() {
auto o = flatbuffers::Offset<RemoveBreakpointRequest>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<RemoveBreakpointRequest> CreateRemoveBreakpointRequest(flatbuffers::FlatBufferBuilder &_fbb) {
RemoveBreakpointRequestBuilder builder_(_fbb);
return builder_.Finish();
}
struct RemoveBreakpointResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct RemoveBreakpointResponseBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
RemoveBreakpointResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
RemoveBreakpointResponseBuilder &operator=(const RemoveBreakpointResponseBuilder &);
flatbuffers::Offset<RemoveBreakpointResponse> Finish() {
auto o = flatbuffers::Offset<RemoveBreakpointResponse>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<RemoveBreakpointResponse> CreateRemoveBreakpointResponse(flatbuffers::FlatBufferBuilder &_fbb) {
RemoveBreakpointResponseBuilder builder_(_fbb);
inline flatbuffers::Offset<RemoveBreakpointsResponse> CreateRemoveBreakpointsResponse(flatbuffers::FlatBufferBuilder &_fbb) {
RemoveBreakpointsResponseBuilder builder_(_fbb);
return builder_.Finish();
}

View File

@ -1 +1,5 @@
namespace xe.debug.proto;
struct XObject {
handle:uint;
}

View File

@ -0,0 +1,31 @@
// automatically generated by the FlatBuffers compiler, do not modify
#ifndef FLATBUFFERS_GENERATED_COMMON_XE_DEBUG_PROTO_H_
#define FLATBUFFERS_GENERATED_COMMON_XE_DEBUG_PROTO_H_
#include "flatbuffers/flatbuffers.h"
namespace xe {
namespace debug {
namespace proto {
struct XObject;
MANUALLY_ALIGNED_STRUCT(4) XObject FLATBUFFERS_FINAL_CLASS {
private:
uint32_t handle_;
public:
XObject(uint32_t handle)
: handle_(flatbuffers::EndianScalar(handle)) { }
uint32_t handle() const { return flatbuffers::EndianScalar(handle_); }
};
STRUCT_END(XObject, 4);
} // namespace proto
} // namespace debug
} // namespace xe
#endif // FLATBUFFERS_GENERATED_COMMON_XE_DEBUG_PROTO_H_

View File

@ -1,3 +1,49 @@
include "common.fbs";
namespace xe.debug.proto;
table StopRequest {
}
table StopResponse {
}
table BreakRequest {
}
table BreakResponse {
}
enum ContinueAction:byte {
Continue,
ContinueTo,
}
table ContinueRequest {
action:ContinueAction;
target_address:uint;
}
table ContinueResponse {
}
enum StepAction:byte {
StepIn,
StepOver,
StepOut,
}
table StepRequest {
action:StepAction;
thread_id:uint;
}
table StepResponse {
}
table BreakpointEvent {
thread_id:uint;
breakpoint_id:uint;
}
table AccessViolationEvent {
thread_id:uint;
target_address:uint;
}

View File

@ -0,0 +1,330 @@
// automatically generated by the FlatBuffers compiler, do not modify
#ifndef FLATBUFFERS_GENERATED_CONTROL_XE_DEBUG_PROTO_H_
#define FLATBUFFERS_GENERATED_CONTROL_XE_DEBUG_PROTO_H_
#include "flatbuffers/flatbuffers.h"
namespace xe {
namespace debug {
namespace proto {
struct XObject;
} // namespace proto
} // namespace debug
} // namespace xe
namespace xe {
namespace debug {
namespace proto {
struct StopRequest;
struct StopResponse;
struct BreakRequest;
struct BreakResponse;
struct ContinueRequest;
struct ContinueResponse;
struct StepRequest;
struct StepResponse;
struct BreakpointEvent;
struct AccessViolationEvent;
enum ContinueAction {
ContinueAction_Continue = 0,
ContinueAction_ContinueTo = 1
};
inline const char **EnumNamesContinueAction() {
static const char *names[] = { "Continue", "ContinueTo", nullptr };
return names;
}
inline const char *EnumNameContinueAction(ContinueAction e) { return EnumNamesContinueAction()[e]; }
enum StepAction {
StepAction_StepIn = 0,
StepAction_StepOver = 1,
StepAction_StepOut = 2
};
inline const char **EnumNamesStepAction() {
static const char *names[] = { "StepIn", "StepOver", "StepOut", nullptr };
return names;
}
inline const char *EnumNameStepAction(StepAction e) { return EnumNamesStepAction()[e]; }
struct StopRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct StopRequestBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
StopRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
StopRequestBuilder &operator=(const StopRequestBuilder &);
flatbuffers::Offset<StopRequest> Finish() {
auto o = flatbuffers::Offset<StopRequest>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<StopRequest> CreateStopRequest(flatbuffers::FlatBufferBuilder &_fbb) {
StopRequestBuilder builder_(_fbb);
return builder_.Finish();
}
struct StopResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct StopResponseBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
StopResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
StopResponseBuilder &operator=(const StopResponseBuilder &);
flatbuffers::Offset<StopResponse> Finish() {
auto o = flatbuffers::Offset<StopResponse>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<StopResponse> CreateStopResponse(flatbuffers::FlatBufferBuilder &_fbb) {
StopResponseBuilder builder_(_fbb);
return builder_.Finish();
}
struct BreakRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct BreakRequestBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
BreakRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
BreakRequestBuilder &operator=(const BreakRequestBuilder &);
flatbuffers::Offset<BreakRequest> Finish() {
auto o = flatbuffers::Offset<BreakRequest>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<BreakRequest> CreateBreakRequest(flatbuffers::FlatBufferBuilder &_fbb) {
BreakRequestBuilder builder_(_fbb);
return builder_.Finish();
}
struct BreakResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct BreakResponseBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
BreakResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
BreakResponseBuilder &operator=(const BreakResponseBuilder &);
flatbuffers::Offset<BreakResponse> Finish() {
auto o = flatbuffers::Offset<BreakResponse>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<BreakResponse> CreateBreakResponse(flatbuffers::FlatBufferBuilder &_fbb) {
BreakResponseBuilder builder_(_fbb);
return builder_.Finish();
}
struct ContinueRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
ContinueAction action() const { return static_cast<ContinueAction>(GetField<int8_t>(4, 0)); }
uint32_t target_address() const { return GetField<uint32_t>(6, 0); }
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<int8_t>(verifier, 4 /* action */) &&
VerifyField<uint32_t>(verifier, 6 /* target_address */) &&
verifier.EndTable();
}
};
struct ContinueRequestBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
void add_action(ContinueAction action) { fbb_.AddElement<int8_t>(4, static_cast<int8_t>(action), 0); }
void add_target_address(uint32_t target_address) { fbb_.AddElement<uint32_t>(6, target_address, 0); }
ContinueRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
ContinueRequestBuilder &operator=(const ContinueRequestBuilder &);
flatbuffers::Offset<ContinueRequest> Finish() {
auto o = flatbuffers::Offset<ContinueRequest>(fbb_.EndTable(start_, 2));
return o;
}
};
inline flatbuffers::Offset<ContinueRequest> CreateContinueRequest(flatbuffers::FlatBufferBuilder &_fbb,
ContinueAction action = ContinueAction_Continue,
uint32_t target_address = 0) {
ContinueRequestBuilder builder_(_fbb);
builder_.add_target_address(target_address);
builder_.add_action(action);
return builder_.Finish();
}
struct ContinueResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct ContinueResponseBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
ContinueResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
ContinueResponseBuilder &operator=(const ContinueResponseBuilder &);
flatbuffers::Offset<ContinueResponse> Finish() {
auto o = flatbuffers::Offset<ContinueResponse>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<ContinueResponse> CreateContinueResponse(flatbuffers::FlatBufferBuilder &_fbb) {
ContinueResponseBuilder builder_(_fbb);
return builder_.Finish();
}
struct StepRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
StepAction action() const { return static_cast<StepAction>(GetField<int8_t>(4, 0)); }
uint32_t thread_id() const { return GetField<uint32_t>(6, 0); }
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<int8_t>(verifier, 4 /* action */) &&
VerifyField<uint32_t>(verifier, 6 /* thread_id */) &&
verifier.EndTable();
}
};
struct StepRequestBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
void add_action(StepAction action) { fbb_.AddElement<int8_t>(4, static_cast<int8_t>(action), 0); }
void add_thread_id(uint32_t thread_id) { fbb_.AddElement<uint32_t>(6, thread_id, 0); }
StepRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
StepRequestBuilder &operator=(const StepRequestBuilder &);
flatbuffers::Offset<StepRequest> Finish() {
auto o = flatbuffers::Offset<StepRequest>(fbb_.EndTable(start_, 2));
return o;
}
};
inline flatbuffers::Offset<StepRequest> CreateStepRequest(flatbuffers::FlatBufferBuilder &_fbb,
StepAction action = StepAction_StepIn,
uint32_t thread_id = 0) {
StepRequestBuilder builder_(_fbb);
builder_.add_thread_id(thread_id);
builder_.add_action(action);
return builder_.Finish();
}
struct StepResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
verifier.EndTable();
}
};
struct StepResponseBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
StepResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
StepResponseBuilder &operator=(const StepResponseBuilder &);
flatbuffers::Offset<StepResponse> Finish() {
auto o = flatbuffers::Offset<StepResponse>(fbb_.EndTable(start_, 0));
return o;
}
};
inline flatbuffers::Offset<StepResponse> CreateStepResponse(flatbuffers::FlatBufferBuilder &_fbb) {
StepResponseBuilder builder_(_fbb);
return builder_.Finish();
}
struct BreakpointEvent FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
uint32_t thread_id() const { return GetField<uint32_t>(4, 0); }
uint32_t breakpoint_id() const { return GetField<uint32_t>(6, 0); }
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<uint32_t>(verifier, 4 /* thread_id */) &&
VerifyField<uint32_t>(verifier, 6 /* breakpoint_id */) &&
verifier.EndTable();
}
};
struct BreakpointEventBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
void add_thread_id(uint32_t thread_id) { fbb_.AddElement<uint32_t>(4, thread_id, 0); }
void add_breakpoint_id(uint32_t breakpoint_id) { fbb_.AddElement<uint32_t>(6, breakpoint_id, 0); }
BreakpointEventBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
BreakpointEventBuilder &operator=(const BreakpointEventBuilder &);
flatbuffers::Offset<BreakpointEvent> Finish() {
auto o = flatbuffers::Offset<BreakpointEvent>(fbb_.EndTable(start_, 2));
return o;
}
};
inline flatbuffers::Offset<BreakpointEvent> CreateBreakpointEvent(flatbuffers::FlatBufferBuilder &_fbb,
uint32_t thread_id = 0,
uint32_t breakpoint_id = 0) {
BreakpointEventBuilder builder_(_fbb);
builder_.add_breakpoint_id(breakpoint_id);
builder_.add_thread_id(thread_id);
return builder_.Finish();
}
struct AccessViolationEvent FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
uint32_t thread_id() const { return GetField<uint32_t>(4, 0); }
uint32_t target_address() const { return GetField<uint32_t>(6, 0); }
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<uint32_t>(verifier, 4 /* thread_id */) &&
VerifyField<uint32_t>(verifier, 6 /* target_address */) &&
verifier.EndTable();
}
};
struct AccessViolationEventBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
void add_thread_id(uint32_t thread_id) { fbb_.AddElement<uint32_t>(4, thread_id, 0); }
void add_target_address(uint32_t target_address) { fbb_.AddElement<uint32_t>(6, target_address, 0); }
AccessViolationEventBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
AccessViolationEventBuilder &operator=(const AccessViolationEventBuilder &);
flatbuffers::Offset<AccessViolationEvent> Finish() {
auto o = flatbuffers::Offset<AccessViolationEvent>(fbb_.EndTable(start_, 2));
return o;
}
};
inline flatbuffers::Offset<AccessViolationEvent> CreateAccessViolationEvent(flatbuffers::FlatBufferBuilder &_fbb,
uint32_t thread_id = 0,
uint32_t target_address = 0) {
AccessViolationEventBuilder builder_(_fbb);
builder_.add_target_address(target_address);
builder_.add_thread_id(thread_id);
return builder_.Finish();
}
} // namespace proto
} // namespace debug
} // namespace xe
#endif // FLATBUFFERS_GENERATED_CONTROL_XE_DEBUG_PROTO_H_

View File

@ -1,27 +1,11 @@
include "breakpoints.fbs";
include "common.fbs";
include "control.fbs";
include "modules.fbs";
include "threads.fbs";
namespace xe.debug.proto;
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 (key);
}
table AttachRequest {
//
}
@ -35,9 +19,17 @@ union RequestData {
AttachRequest,
ListBreakpointsRequest,
AddBreakpointRequest,
UpdateBreakpointRequest,
RemoveBreakpointRequest,
AddBreakpointsRequest,
UpdateBreakpointsRequest,
RemoveBreakpointsRequest,
ListModulesRequest,
GetModuleRequest,
StopRequest,
BreakRequest,
ContinueRequest,
StepRequest,
}
table Request {
@ -49,9 +41,20 @@ union ResponseData {
AttachResponse,
ListBreakpointsResponse,
AddBreakpointResponse,
UpdateBreakpointResponse,
RemoveBreakpointResponse,
AddBreakpointsResponse,
UpdateBreakpointsResponse,
RemoveBreakpointsResponse,
ListModulesResponse,
GetModuleResponse,
StopResponse,
BreakResponse,
ContinueResponse,
StepResponse,
BreakpointEvent,
AccessViolationEvent,
}
table Response {

View File

@ -8,14 +8,58 @@
namespace xe {
namespace debug {
namespace proto {
struct XObject;
} // namespace proto
} // namespace debug
} // namespace xe
namespace xe {
namespace debug {
namespace proto {
struct Breakpoint;
struct ListBreakpointsRequest;
struct ListBreakpointsResponse;
struct AddBreakpointRequest;
struct AddBreakpointResponse;
struct UpdateBreakpointRequest;
struct UpdateBreakpointResponse;
struct RemoveBreakpointRequest;
struct RemoveBreakpointResponse;
struct AddBreakpointsRequest;
struct AddBreakpointsResponse;
struct UpdateBreakpointsRequest;
struct UpdateBreakpointsResponse;
struct RemoveBreakpointsRequest;
struct RemoveBreakpointsResponse;
} // namespace proto
} // namespace debug
} // namespace xe
namespace xe {
namespace debug {
namespace proto {
struct StopRequest;
struct StopResponse;
struct BreakRequest;
struct BreakResponse;
struct ContinueRequest;
struct ContinueResponse;
struct StepRequest;
struct StepResponse;
struct BreakpointEvent;
struct AccessViolationEvent;
} // namespace proto
} // namespace debug
} // namespace xe
namespace xe {
namespace debug {
namespace proto {
struct Module;
struct ListModulesRequest;
struct ListModulesResponse;
struct GetModuleRequest;
struct GetModuleResponse;
} // namespace proto
} // namespace debug
} // namespace xe
namespace xe {
namespace debug {
namespace proto {
struct Thread;
struct ListThreadsRequest;
struct ListThreadsResponse;
} // namespace proto
} // namespace debug
} // namespace xe
@ -24,36 +68,28 @@ namespace xe {
namespace debug {
namespace proto {
struct StructTest;
struct TableTest;
struct AttachRequest;
struct AttachResponse;
struct Request;
struct Response;
enum Foo {
Foo_A = 1,
Foo_B = 2
};
inline const char **EnumNamesFoo() {
static const char *names[] = { "A", "B", nullptr };
return names;
}
inline const char *EnumNameFoo(Foo e) { return EnumNamesFoo()[e - Foo_A]; }
enum RequestData {
RequestData_NONE = 0,
RequestData_AttachRequest = 1,
RequestData_ListBreakpointsRequest = 2,
RequestData_AddBreakpointRequest = 3,
RequestData_UpdateBreakpointRequest = 4,
RequestData_RemoveBreakpointRequest = 5
RequestData_AddBreakpointsRequest = 3,
RequestData_UpdateBreakpointsRequest = 4,
RequestData_RemoveBreakpointsRequest = 5,
RequestData_ListModulesRequest = 6,
RequestData_GetModuleRequest = 7,
RequestData_StopRequest = 8,
RequestData_BreakRequest = 9,
RequestData_ContinueRequest = 10,
RequestData_StepRequest = 11
};
inline const char **EnumNamesRequestData() {
static const char *names[] = { "NONE", "AttachRequest", "ListBreakpointsRequest", "AddBreakpointRequest", "UpdateBreakpointRequest", "RemoveBreakpointRequest", nullptr };
static const char *names[] = { "NONE", "AttachRequest", "ListBreakpointsRequest", "AddBreakpointsRequest", "UpdateBreakpointsRequest", "RemoveBreakpointsRequest", "ListModulesRequest", "GetModuleRequest", "StopRequest", "BreakRequest", "ContinueRequest", "StepRequest", nullptr };
return names;
}
@ -65,13 +101,21 @@ enum ResponseData {
ResponseData_NONE = 0,
ResponseData_AttachResponse = 1,
ResponseData_ListBreakpointsResponse = 2,
ResponseData_AddBreakpointResponse = 3,
ResponseData_UpdateBreakpointResponse = 4,
ResponseData_RemoveBreakpointResponse = 5
ResponseData_AddBreakpointsResponse = 3,
ResponseData_UpdateBreakpointsResponse = 4,
ResponseData_RemoveBreakpointsResponse = 5,
ResponseData_ListModulesResponse = 6,
ResponseData_GetModuleResponse = 7,
ResponseData_StopResponse = 8,
ResponseData_BreakResponse = 9,
ResponseData_ContinueResponse = 10,
ResponseData_StepResponse = 11,
ResponseData_BreakpointEvent = 12,
ResponseData_AccessViolationEvent = 13
};
inline const char **EnumNamesResponseData() {
static const char *names[] = { "NONE", "AttachResponse", "ListBreakpointsResponse", "AddBreakpointResponse", "UpdateBreakpointResponse", "RemoveBreakpointResponse", nullptr };
static const char *names[] = { "NONE", "AttachResponse", "ListBreakpointsResponse", "AddBreakpointsResponse", "UpdateBreakpointsResponse", "RemoveBreakpointsResponse", "ListModulesResponse", "GetModuleResponse", "StopResponse", "BreakResponse", "ContinueResponse", "StepResponse", "BreakpointEvent", "AccessViolationEvent", nullptr };
return names;
}
@ -79,70 +123,6 @@ inline const char *EnumNameResponseData(ResponseData e) { return EnumNamesRespon
inline bool VerifyResponseData(flatbuffers::Verifier &verifier, const void *union_obj, ResponseData type);
MANUALLY_ALIGNED_STRUCT(2) StructTest FLATBUFFERS_FINAL_CLASS {
private:
int16_t a_;
int8_t b_;
int8_t c_;
public:
StructTest(int16_t a, int8_t b, Foo c)
: a_(flatbuffers::EndianScalar(a)), b_(flatbuffers::EndianScalar(b)), c_(flatbuffers::EndianScalar(static_cast<int8_t>(c))) { }
int16_t a() const { return flatbuffers::EndianScalar(a_); }
int8_t b() const { return flatbuffers::EndianScalar(b_); }
Foo c() const { return static_cast<Foo>(flatbuffers::EndianScalar(c_)); }
};
STRUCT_END(StructTest, 4);
struct TableTest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
const StructTest *st() const { return GetStruct<const StructTest *>(4); }
const flatbuffers::Vector<uint8_t> *iv() const { return GetPointer<const flatbuffers::Vector<uint8_t> *>(6); }
const flatbuffers::String *name() const { return GetPointer<const flatbuffers::String *>(8); }
uint32_t id() const { return GetField<uint32_t>(10, 0); }
bool KeyCompareLessThan(const TableTest *o) const { return id() < o->id(); }
int KeyCompareWithValue(uint32_t val) const { return id() < val ? -1 : id() > val; }
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<StructTest>(verifier, 4 /* st */) &&
VerifyField<flatbuffers::uoffset_t>(verifier, 6 /* iv */) &&
verifier.Verify(iv()) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, 8 /* name */) &&
verifier.Verify(name()) &&
VerifyField<uint32_t>(verifier, 10 /* id */) &&
verifier.EndTable();
}
};
struct TableTestBuilder {
flatbuffers::FlatBufferBuilder &fbb_;
flatbuffers::uoffset_t start_;
void add_st(const StructTest *st) { fbb_.AddStruct(4, st); }
void add_iv(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> iv) { fbb_.AddOffset(6, iv); }
void add_name(flatbuffers::Offset<flatbuffers::String> name) { fbb_.AddOffset(8, name); }
void add_id(uint32_t id) { fbb_.AddElement<uint32_t>(10, id, 0); }
TableTestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
TableTestBuilder &operator=(const TableTestBuilder &);
flatbuffers::Offset<TableTest> Finish() {
auto o = flatbuffers::Offset<TableTest>(fbb_.EndTable(start_, 4));
fbb_.Required(o, 8); // name
return o;
}
};
inline flatbuffers::Offset<TableTest> CreateTableTest(flatbuffers::FlatBufferBuilder &_fbb,
const StructTest *st = 0,
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> iv = 0,
flatbuffers::Offset<flatbuffers::String> name = 0,
uint32_t id = 0) {
TableTestBuilder builder_(_fbb);
builder_.add_id(id);
builder_.add_name(name);
builder_.add_iv(iv);
builder_.add_st(st);
return builder_.Finish();
}
struct AttachRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
@ -290,9 +270,15 @@ inline bool VerifyRequestData(flatbuffers::Verifier &verifier, const void *union
case RequestData_NONE: return true;
case RequestData_AttachRequest: return verifier.VerifyTable(reinterpret_cast<const AttachRequest *>(union_obj));
case RequestData_ListBreakpointsRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::ListBreakpointsRequest *>(union_obj));
case RequestData_AddBreakpointRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::AddBreakpointRequest *>(union_obj));
case RequestData_UpdateBreakpointRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::UpdateBreakpointRequest *>(union_obj));
case RequestData_RemoveBreakpointRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::RemoveBreakpointRequest *>(union_obj));
case RequestData_AddBreakpointsRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::AddBreakpointsRequest *>(union_obj));
case RequestData_UpdateBreakpointsRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::UpdateBreakpointsRequest *>(union_obj));
case RequestData_RemoveBreakpointsRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::RemoveBreakpointsRequest *>(union_obj));
case RequestData_ListModulesRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::ListModulesRequest *>(union_obj));
case RequestData_GetModuleRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::GetModuleRequest *>(union_obj));
case RequestData_StopRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::StopRequest *>(union_obj));
case RequestData_BreakRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::BreakRequest *>(union_obj));
case RequestData_ContinueRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::ContinueRequest *>(union_obj));
case RequestData_StepRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::StepRequest *>(union_obj));
default: return false;
}
}
@ -302,9 +288,17 @@ inline bool VerifyResponseData(flatbuffers::Verifier &verifier, const void *unio
case ResponseData_NONE: return true;
case ResponseData_AttachResponse: return verifier.VerifyTable(reinterpret_cast<const AttachResponse *>(union_obj));
case ResponseData_ListBreakpointsResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::ListBreakpointsResponse *>(union_obj));
case ResponseData_AddBreakpointResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::AddBreakpointResponse *>(union_obj));
case ResponseData_UpdateBreakpointResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::UpdateBreakpointResponse *>(union_obj));
case ResponseData_RemoveBreakpointResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::RemoveBreakpointResponse *>(union_obj));
case ResponseData_AddBreakpointsResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::AddBreakpointsResponse *>(union_obj));
case ResponseData_UpdateBreakpointsResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::UpdateBreakpointsResponse *>(union_obj));
case ResponseData_RemoveBreakpointsResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::RemoveBreakpointsResponse *>(union_obj));
case ResponseData_ListModulesResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::ListModulesResponse *>(union_obj));
case ResponseData_GetModuleResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::GetModuleResponse *>(union_obj));
case ResponseData_StopResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::StopResponse *>(union_obj));
case ResponseData_BreakResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::BreakResponse *>(union_obj));
case ResponseData_ContinueResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::ContinueResponse *>(union_obj));
case ResponseData_StepResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::StepResponse *>(union_obj));
case ResponseData_BreakpointEvent: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::BreakpointEvent *>(union_obj));
case ResponseData_AccessViolationEvent: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::AccessViolationEvent *>(union_obj));
default: return false;
}
}

View File

@ -0,0 +1,31 @@
include "common.fbs";
namespace xe.debug.proto;
enum ModuleType:byte {
Kernel,
User,
}
table Module {
object:XObject;
type:ModuleType;
name:string;
path:string;
// TODO(benvanik): xex info/etc?
}
table ListModulesRequest {
}
table ListModulesResponse {
module_ids:[uint];
}
table GetModuleRequest {
module_id:uint;
}
table GetModuleResponse {
module:Module;
}

Some files were not shown because too many files have changed in this diff Show More