Fleshing out debugger types.
After Width: | Height: | Size: 297 B |
After Width: | Height: | Size: 355 B |
After Width: | Height: | Size: 824 B |
After Width: | Height: | Size: 824 B |
After Width: | Height: | Size: 824 B |
After Width: | Height: | Size: 410 B |
|
@ -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" />
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
|
@ -9,6 +9,7 @@
|
|||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Xenia.Debug.UI.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
@ -37,7 +38,7 @@ namespace Xenia.Debug.UI.Properties {
|
|||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if ((resourceMan == null)) {
|
||||
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;
|
||||
}
|
||||
|
@ -58,5 +59,65 @@ namespace Xenia.Debug.UI.Properties {
|
|||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
After Width: | Height: | Size: 297 B |
After Width: | Height: | Size: 355 B |
After Width: | Height: | Size: 824 B |
After Width: | Height: | Size: 824 B |
After Width: | Height: | Size: 824 B |
After Width: | Height: | Size: 410 B |
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
// automatically generated, do not modify
|
||||
|
||||
namespace xe.debug.proto
|
||||
{
|
||||
|
||||
public enum ContinueAction : sbyte
|
||||
{
|
||||
Continue = 0,
|
||||
ContinueTo = 1,
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -3,10 +3,10 @@
|
|||
namespace xe.debug.proto
|
||||
{
|
||||
|
||||
public enum Foo : sbyte
|
||||
public enum ModuleType : sbyte
|
||||
{
|
||||
A = 1,
|
||||
B = 2,
|
||||
Kernel = 0,
|
||||
User = 1,
|
||||
};
|
||||
|
||||
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
// automatically generated, do not modify
|
||||
|
||||
namespace xe.debug.proto
|
||||
{
|
||||
|
||||
public enum StepAction : sbyte
|
||||
{
|
||||
StepIn = 0,
|
||||
StepOver = 1,
|
||||
StepOut = 2,
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
// automatically generated, do not modify
|
||||
|
||||
namespace xe.debug.proto
|
||||
{
|
||||
|
||||
public enum ThreadType : sbyte
|
||||
{
|
||||
Kernel = 0,
|
||||
User = 1,
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
|
||||
#include "xenia/debug/function_data.h"
|
||||
#include "xenia/debug/function_trace_data.h"
|
||||
|
||||
namespace xe {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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_
|
|
@ -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 {
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -1 +1,5 @@
|
|||
namespace xe.debug.proto;
|
||||
|
||||
struct XObject {
|
||||
handle:uint;
|
||||
}
|
||||
|
|
|
@ -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_
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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_
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|