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\cpu\xex_module.h" />
|
||||||
<ClInclude Include="src\xenia\debug\breakpoint.h" />
|
<ClInclude Include="src\xenia\debug\breakpoint.h" />
|
||||||
<ClInclude Include="src\xenia\debug\debugger.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\function_trace_data.h" />
|
||||||
<ClInclude Include="src\xenia\debug\proto\breakpoints_generated.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\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\emulator.h" />
|
||||||
<ClInclude Include="src\xenia\gpu\gl4\blitter.h" />
|
<ClInclude Include="src\xenia\gpu\gl4\blitter.h" />
|
||||||
<ClInclude Include="src\xenia\gpu\gl4\circular_buffer.h" />
|
<ClInclude Include="src\xenia\gpu\gl4\circular_buffer.h" />
|
||||||
|
@ -419,7 +422,12 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="src\xenia\cpu\backend\x64\x64_sequence.inl" />
|
<None Include="src\xenia\cpu\backend\x64\x64_sequence.inl" />
|
||||||
<None Include="src\xenia\cpu\hir\opcodes.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\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\gpu\register_table.inc" />
|
||||||
<None Include="src\xenia\kernel\util\export_table_post.inc" />
|
<None Include="src\xenia\kernel\util\export_table_post.inc" />
|
||||||
<None Include="src\xenia\kernel\util\export_table_pre.inc" />
|
<None Include="src\xenia\kernel\util\export_table_pre.inc" />
|
||||||
|
|
|
@ -30,9 +30,21 @@
|
||||||
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
|
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
|
||||||
this.statusStrip = new System.Windows.Forms.StatusStrip();
|
this.statusStrip = new System.Windows.Forms.StatusStrip();
|
||||||
this.statusMessageLabel = new System.Windows.Forms.ToolStripStatusLabel();
|
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.mainMenuStrip.SuspendLayout();
|
||||||
this.mainToolStrip.SuspendLayout();
|
this.mainToolStrip.SuspendLayout();
|
||||||
this.statusStrip.SuspendLayout();
|
this.statusStrip.SuspendLayout();
|
||||||
|
this.controlToolStrip.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// mainMenuStrip
|
// mainMenuStrip
|
||||||
|
@ -82,14 +94,114 @@
|
||||||
// statusMessageLabel
|
// statusMessageLabel
|
||||||
//
|
//
|
||||||
this.statusMessageLabel.Name = "statusMessageLabel";
|
this.statusMessageLabel.Name = "statusMessageLabel";
|
||||||
this.statusMessageLabel.Size = new System.Drawing.Size(118, 17);
|
this.statusMessageLabel.Size = new System.Drawing.Size(0, 17);
|
||||||
this.statusMessageLabel.Text = "";
|
//
|
||||||
|
// 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
|
// MainWindow
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(1571, 1103);
|
this.ClientSize = new System.Drawing.Size(1571, 1103);
|
||||||
|
this.Controls.Add(this.controlToolStrip);
|
||||||
this.Controls.Add(this.statusStrip);
|
this.Controls.Add(this.statusStrip);
|
||||||
this.Controls.Add(this.mainToolStrip);
|
this.Controls.Add(this.mainToolStrip);
|
||||||
this.Controls.Add(this.mainMenuStrip);
|
this.Controls.Add(this.mainMenuStrip);
|
||||||
|
@ -103,6 +215,8 @@
|
||||||
this.mainToolStrip.PerformLayout();
|
this.mainToolStrip.PerformLayout();
|
||||||
this.statusStrip.ResumeLayout(false);
|
this.statusStrip.ResumeLayout(false);
|
||||||
this.statusStrip.PerformLayout();
|
this.statusStrip.PerformLayout();
|
||||||
|
this.controlToolStrip.ResumeLayout(false);
|
||||||
|
this.controlToolStrip.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
this.PerformLayout();
|
||||||
|
|
||||||
|
@ -117,5 +231,16 @@
|
||||||
private System.Windows.Forms.StatusStrip statusStrip;
|
private System.Windows.Forms.StatusStrip statusStrip;
|
||||||
private System.Windows.Forms.ToolStripStatusLabel statusMessageLabel;
|
private System.Windows.Forms.ToolStripStatusLabel statusMessageLabel;
|
||||||
private WeifenLuo.WinFormsUI.Docking.DockPanel dockPanel;
|
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();
|
SetupDefaultLayout();
|
||||||
|
|
||||||
|
// For hotkeys.
|
||||||
|
KeyPreview = true;
|
||||||
|
|
||||||
Debugger.StateChanged += Debugger_StateChanged;
|
Debugger.StateChanged += Debugger_StateChanged;
|
||||||
Debugger_StateChanged(this, Debugger.CurrentState);
|
Debugger_StateChanged(this, Debugger.CurrentState);
|
||||||
|
Debugger.CurrentContext.Changed += CurrentContext_Changed;
|
||||||
|
CurrentContext_Changed();
|
||||||
|
|
||||||
Debugger.Attach();
|
Debugger.Attach();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Debugger_StateChanged(object sender, Debugger.State e) {
|
private void Debugger_StateChanged(object sender, Debugger.State e) {
|
||||||
|
bool enabled = false;
|
||||||
switch (e) {
|
switch (e) {
|
||||||
case Debugger.State.Idle:
|
case Debugger.State.Idle:
|
||||||
statusMessageLabel.Text = "Idle";
|
statusMessageLabel.Text = "Idle";
|
||||||
|
@ -86,11 +92,36 @@ namespace Xenia.Debug.UI {
|
||||||
break;
|
break;
|
||||||
case Debugger.State.Attached:
|
case Debugger.State.Attached:
|
||||||
statusMessageLabel.Text = "Attached";
|
statusMessageLabel.Text = "Attached";
|
||||||
|
enabled = true;
|
||||||
break;
|
break;
|
||||||
case Debugger.State.Detached:
|
case Debugger.State.Detached:
|
||||||
statusMessageLabel.Text = "Detached";
|
statusMessageLabel.Text = "Detached";
|
||||||
break;
|
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() {
|
private void SetupDefaultLayout() {
|
||||||
|
@ -125,5 +156,53 @@ namespace Xenia.Debug.UI {
|
||||||
|
|
||||||
dockPanel.ResumeLayout(true, true);
|
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">
|
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>237, 17</value>
|
<value>237, 17</value>
|
||||||
</metadata>
|
</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>
|
</root>
|
|
@ -9,6 +9,7 @@
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
namespace Xenia.Debug.UI.Properties {
|
namespace Xenia.Debug.UI.Properties {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -37,7 +38,7 @@ namespace Xenia.Debug.UI.Properties {
|
||||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
get {
|
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);
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Xenia.Debug.UI.Properties.Resources", typeof(Resources).Assembly);
|
||||||
resourceMan = temp;
|
resourceMan = temp;
|
||||||
}
|
}
|
||||||
|
@ -58,5 +59,65 @@ namespace Xenia.Debug.UI.Properties {
|
||||||
resourceCulture = value;
|
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
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
value : The object must be serialized with
|
value : The object must be serialized with
|
||||||
: System.Serialization.Formatters.Binary.BinaryFormatter
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
: and then encoded with base64 encoding.
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
@ -60,6 +60,7 @@
|
||||||
: and then encoded with base64 encoding.
|
: 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: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:element name="root" msdata:IsDataSet="true">
|
||||||
<xsd:complexType>
|
<xsd:complexType>
|
||||||
<xsd:choice maxOccurs="unbounded">
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
@ -68,9 +69,10 @@
|
||||||
<xsd:sequence>
|
<xsd:sequence>
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
</xsd:sequence>
|
</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="type" type="xsd:string" />
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
</xsd:complexType>
|
</xsd:complexType>
|
||||||
</xsd:element>
|
</xsd:element>
|
||||||
<xsd:element name="assembly">
|
<xsd:element name="assembly">
|
||||||
|
@ -85,9 +87,10 @@
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
<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:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
</xsd:sequence>
|
</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="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
</xsd:complexType>
|
</xsd:complexType>
|
||||||
</xsd:element>
|
</xsd:element>
|
||||||
<xsd:element name="resheader">
|
<xsd:element name="resheader">
|
||||||
|
@ -109,9 +112,28 @@
|
||||||
<value>2.0</value>
|
<value>2.0</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="reader">
|
<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>
|
||||||
<resheader name="writer">
|
<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>
|
</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>
|
</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.
|
/// the contents of this method with the code editor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
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.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.Text = "Breakpoints";
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#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) {
|
public BreakpointsPanel(Debugger debugger) {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.debugger = debugger;
|
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.
|
/// the contents of this method with the code editor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
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.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.Text = "Callstack";
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#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.
|
/// the contents of this method with the code editor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
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.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.Text = "Code";
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#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.
|
/// the contents of this method with the code editor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
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.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.Text = "Functions";
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#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) {
|
public FunctionsPanel(Debugger debugger) {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.debugger = debugger;
|
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.
|
/// the contents of this method with the code editor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
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.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.Text = "Modules";
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#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) {
|
public ModulesPanel(Debugger debugger) {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.debugger = debugger;
|
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.
|
/// the contents of this method with the code editor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
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.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.Text = "Threads";
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#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) {
|
public ThreadsPanel(Debugger debugger) {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.debugger = debugger;
|
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">
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
<DependentUpon>Resources.resx</DependentUpon>
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
</Compile>
|
</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">
|
<None Include="Properties\Settings.settings">
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
@ -184,6 +203,14 @@
|
||||||
<Name>Xenia.Debug</Name>
|
<Name>Xenia.Debug</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</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" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- 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.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
|
|
@ -6,5 +6,14 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Xenia.Debug {
|
namespace Xenia.Debug {
|
||||||
public class Callstack {
|
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 uint nextRequestId = 1;
|
||||||
|
|
||||||
private FileMappingHandle memoryHandle;
|
private FileMappingHandle memoryHandle;
|
||||||
public IntPtr Membase {
|
|
||||||
get;
|
|
||||||
}
|
|
||||||
|
|
||||||
public unsafe byte* TranslateVirtual(uint address) {
|
public unsafe byte* TranslateVirtual(uint address) {
|
||||||
return (byte*)Membase.ToPointer() + address;
|
return (byte*)Memory.VirtualMembase.ToPointer() + address;
|
||||||
}
|
}
|
||||||
|
|
||||||
public unsafe byte* TranslatePhysical(uint 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;
|
public event EventHandler<State> StateChanged;
|
||||||
|
@ -54,30 +51,22 @@ namespace Xenia.Debug {
|
||||||
}
|
}
|
||||||
= State.Idle;
|
= State.Idle;
|
||||||
|
|
||||||
public BreakpointList BreakpointList {
|
public readonly Context CurrentContext;
|
||||||
get;
|
|
||||||
}
|
public readonly BreakpointList BreakpointList;
|
||||||
public FunctionList FunctionList {
|
public readonly Memory Memory;
|
||||||
get;
|
public readonly ModuleList ModuleList;
|
||||||
}
|
public readonly ThreadList ThreadList;
|
||||||
public Memory Memory {
|
|
||||||
get;
|
|
||||||
}
|
|
||||||
public ModuleList ModuleList {
|
|
||||||
get;
|
|
||||||
}
|
|
||||||
public ThreadList ThreadList {
|
|
||||||
get;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Debugger(AsyncTaskRunner asyncTaskRunner) {
|
public Debugger(AsyncTaskRunner asyncTaskRunner) {
|
||||||
Dispatch.AsyncTaskRunner = asyncTaskRunner;
|
Dispatch.AsyncTaskRunner = asyncTaskRunner;
|
||||||
|
|
||||||
this.BreakpointList = new BreakpointList(this);
|
this.BreakpointList = new BreakpointList(this);
|
||||||
this.FunctionList = new FunctionList(this);
|
|
||||||
this.Memory = new Memory(this);
|
this.Memory = new Memory(this);
|
||||||
this.ModuleList = new ModuleList(this);
|
this.ModuleList = new ModuleList(this);
|
||||||
this.ThreadList = new ThreadList(this);
|
this.ThreadList = new ThreadList(this);
|
||||||
|
|
||||||
|
this.CurrentContext = new Context(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task Attach() {
|
public Task Attach() {
|
||||||
|
@ -91,8 +80,7 @@ namespace Xenia.Debug {
|
||||||
NetworkAccess.Connect,
|
NetworkAccess.Connect,
|
||||||
TransportType.Tcp,
|
TransportType.Tcp,
|
||||||
kServerHostname,
|
kServerHostname,
|
||||||
kServerPort
|
kServerPort);
|
||||||
);
|
|
||||||
permission.Demand();
|
permission.Demand();
|
||||||
|
|
||||||
IPAddress ipAddress = new IPAddress(new byte[] { 127, 0, 0, 1 });
|
IPAddress ipAddress = new IPAddress(new byte[] { 127, 0, 0, 1 });
|
||||||
|
@ -282,5 +270,96 @@ namespace Xenia.Debug {
|
||||||
StateChanged(this, newState);
|
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 {
|
namespace Xenia.Debug {
|
||||||
public class Function : Changeable {
|
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) {
|
public MemoryView(Memory memory) {
|
||||||
this.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;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using xe.debug.proto;
|
||||||
using Xenia.Debug.Utilities;
|
using Xenia.Debug.Utilities;
|
||||||
|
|
||||||
namespace Xenia.Debug {
|
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.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using xe.debug.proto;
|
||||||
using Xenia.Debug.Utilities;
|
using Xenia.Debug.Utilities;
|
||||||
|
|
||||||
namespace Xenia.Debug {
|
namespace Xenia.Debug {
|
||||||
|
@ -15,6 +16,32 @@ namespace Xenia.Debug {
|
||||||
this.debugger = debugger;
|
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 {
|
public int Count {
|
||||||
get {
|
get {
|
||||||
return modules.Count;
|
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 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 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) {
|
public static int EndListBreakpointsResponse(FlatBufferBuilder builder) {
|
||||||
int o = builder.EndObject();
|
int o = builder.EndObject();
|
||||||
return o;
|
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
|
namespace xe.debug.proto
|
||||||
{
|
{
|
||||||
|
|
||||||
public enum Foo : sbyte
|
public enum ModuleType : sbyte
|
||||||
{
|
{
|
||||||
A = 1,
|
Kernel = 0,
|
||||||
B = 2,
|
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,
|
NONE = 0,
|
||||||
AttachRequest = 1,
|
AttachRequest = 1,
|
||||||
ListBreakpointsRequest = 2,
|
ListBreakpointsRequest = 2,
|
||||||
AddBreakpointRequest = 3,
|
AddBreakpointsRequest = 3,
|
||||||
UpdateBreakpointRequest = 4,
|
UpdateBreakpointsRequest = 4,
|
||||||
RemoveBreakpointRequest = 5,
|
RemoveBreakpointsRequest = 5,
|
||||||
|
ListModulesRequest = 6,
|
||||||
|
GetModuleRequest = 7,
|
||||||
|
StopRequest = 8,
|
||||||
|
BreakRequest = 9,
|
||||||
|
ContinueRequest = 10,
|
||||||
|
StepRequest = 11,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,17 @@ public enum ResponseData : byte
|
||||||
NONE = 0,
|
NONE = 0,
|
||||||
AttachResponse = 1,
|
AttachResponse = 1,
|
||||||
ListBreakpointsResponse = 2,
|
ListBreakpointsResponse = 2,
|
||||||
AddBreakpointResponse = 3,
|
AddBreakpointsResponse = 3,
|
||||||
UpdateBreakpointResponse = 4,
|
UpdateBreakpointsResponse = 4,
|
||||||
RemoveBreakpointResponse = 5,
|
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 {
|
namespace Xenia.Debug {
|
||||||
public class ThreadContext {
|
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="Breakpoint.cs" />
|
||||||
<Compile Include="BreakpointList.cs" />
|
<Compile Include="BreakpointList.cs" />
|
||||||
<Compile Include="Callstack.cs" />
|
<Compile Include="Callstack.cs" />
|
||||||
|
<Compile Include="Context.cs" />
|
||||||
<Compile Include="Debugger.cs" />
|
<Compile Include="Debugger.cs" />
|
||||||
<Compile Include="Function.cs" />
|
<Compile Include="Function.cs" />
|
||||||
<Compile Include="FunctionList.cs" />
|
<Compile Include="KernelObject.cs" />
|
||||||
<Compile Include="Memory.cs" />
|
<Compile Include="Memory.cs" />
|
||||||
<Compile Include="MemoryView.cs" />
|
<Compile Include="MemoryView.cs" />
|
||||||
<Compile Include="Module.cs" />
|
<Compile Include="Module.cs" />
|
||||||
<Compile Include="ModuleList.cs" />
|
<Compile Include="ModuleList.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Proto\xe\debug\proto\AddBreakpointRequest.cs" />
|
<Compile Include="Proto\xe\debug\proto\AccessViolationEvent.cs" />
|
||||||
<Compile Include="Proto\xe\debug\proto\AddBreakpointResponse.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\AttachRequest.cs" />
|
||||||
<Compile Include="Proto\xe\debug\proto\AttachResponse.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\ListBreakpointsRequest.cs" />
|
||||||
<Compile Include="Proto\xe\debug\proto\ListBreakpointsResponse.cs" />
|
<Compile Include="Proto\xe\debug\proto\ListBreakpointsResponse.cs" />
|
||||||
<Compile Include="Proto\xe\debug\proto\RemoveBreakpointRequest.cs" />
|
<Compile Include="Proto\xe\debug\proto\ListModulesRequest.cs" />
|
||||||
<Compile Include="Proto\xe\debug\proto\RemoveBreakpointResponse.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\Request.cs" />
|
||||||
<Compile Include="Proto\xe\debug\proto\RequestData.cs" />
|
<Compile Include="Proto\xe\debug\proto\RequestData.cs" />
|
||||||
<Compile Include="Proto\xe\debug\proto\Response.cs" />
|
<Compile Include="Proto\xe\debug\proto\Response.cs" />
|
||||||
<Compile Include="Proto\xe\debug\proto\ResponseData.cs" />
|
<Compile Include="Proto\xe\debug\proto\ResponseData.cs" />
|
||||||
<Compile Include="Proto\xe\debug\proto\StructTest.cs" />
|
<Compile Include="Proto\xe\debug\proto\StepAction.cs" />
|
||||||
<Compile Include="Proto\xe\debug\proto\TableTest.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="Thread.cs" />
|
||||||
<Compile Include="ThreadList.cs" />
|
<Compile Include="ThreadList.cs" />
|
||||||
<Compile Include="Utilities\Changeable.cs" />
|
<Compile Include="Utilities\Changeable.cs" />
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
#include "xenia/debug/function_data.h"
|
|
||||||
#include "xenia/debug/function_trace_data.h"
|
#include "xenia/debug/function_trace_data.h"
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
|
|
|
@ -25,7 +25,10 @@
|
||||||
|
|
||||||
// Autogenerated Flatbuffers files:
|
// Autogenerated Flatbuffers files:
|
||||||
#include "xenia/debug/proto/breakpoints_generated.h"
|
#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/messages_generated.h"
|
||||||
|
#include "xenia/debug/proto/modules_generated.h"
|
||||||
|
|
||||||
DEFINE_string(debug_session_path, "", "Debug output path.");
|
DEFINE_string(debug_session_path, "", "Debug output path.");
|
||||||
DEFINE_int32(debug_port, 19000, "Port the debugger listens on.");
|
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();
|
response_data_offset = response_data.Finish().Union();
|
||||||
} break;
|
} break;
|
||||||
case proto::RequestData_AddBreakpointRequest: {
|
case proto::RequestData_AddBreakpointsRequest: {
|
||||||
response_data_type = proto::ResponseData_RemoveBreakpointResponse;
|
response_data_type = proto::ResponseData_RemoveBreakpointsResponse;
|
||||||
auto response_data = proto::AddBreakpointResponseBuilder(fbb);
|
auto response_data = proto::AddBreakpointsResponseBuilder(fbb);
|
||||||
//
|
//
|
||||||
response_data_offset = response_data.Finish().Union();
|
response_data_offset = response_data.Finish().Union();
|
||||||
} break;
|
} break;
|
||||||
case proto::RequestData_UpdateBreakpointRequest: {
|
case proto::RequestData_UpdateBreakpointsRequest: {
|
||||||
response_data_type = proto::ResponseData_UpdateBreakpointResponse;
|
response_data_type = proto::ResponseData_UpdateBreakpointsResponse;
|
||||||
auto response_data = proto::UpdateBreakpointResponseBuilder(fbb);
|
auto response_data = proto::UpdateBreakpointsResponseBuilder(fbb);
|
||||||
//
|
//
|
||||||
response_data_offset = response_data.Finish().Union();
|
response_data_offset = response_data.Finish().Union();
|
||||||
} break;
|
} break;
|
||||||
case proto::RequestData_RemoveBreakpointRequest: {
|
case proto::RequestData_RemoveBreakpointsRequest: {
|
||||||
response_data_type = proto::ResponseData_AddBreakpointResponse;
|
response_data_type = proto::ResponseData_AddBreakpointsResponse;
|
||||||
auto response_data = proto::RemoveBreakpointResponseBuilder(fbb);
|
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();
|
response_data_offset = response_data.Finish().Union();
|
||||||
} break;
|
} 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;
|
namespace xe.debug.proto;
|
||||||
|
|
||||||
|
struct Breakpoint {
|
||||||
|
breakpoint_id:uint;
|
||||||
|
}
|
||||||
|
|
||||||
table ListBreakpointsRequest {
|
table ListBreakpointsRequest {
|
||||||
}
|
}
|
||||||
table ListBreakpointsResponse {
|
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"
|
#include "flatbuffers/flatbuffers.h"
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace debug {
|
||||||
|
namespace proto {
|
||||||
|
struct XObject;
|
||||||
|
} // namespace proto
|
||||||
|
} // namespace debug
|
||||||
|
} // namespace xe
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace debug {
|
namespace debug {
|
||||||
namespace proto {
|
namespace proto {
|
||||||
|
|
||||||
|
struct Breakpoint;
|
||||||
struct ListBreakpointsRequest;
|
struct ListBreakpointsRequest;
|
||||||
struct ListBreakpointsResponse;
|
struct ListBreakpointsResponse;
|
||||||
struct AddBreakpointRequest;
|
struct AddBreakpointsRequest;
|
||||||
struct AddBreakpointResponse;
|
struct AddBreakpointsResponse;
|
||||||
struct UpdateBreakpointRequest;
|
struct UpdateBreakpointsRequest;
|
||||||
struct UpdateBreakpointResponse;
|
struct UpdateBreakpointsResponse;
|
||||||
struct RemoveBreakpointRequest;
|
struct RemoveBreakpointsRequest;
|
||||||
struct RemoveBreakpointResponse;
|
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 {
|
struct ListBreakpointsRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||||
bool Verify(flatbuffers::Verifier &verifier) const {
|
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||||
|
@ -43,8 +63,11 @@ inline flatbuffers::Offset<ListBreakpointsRequest> CreateListBreakpointsRequest(
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ListBreakpointsResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
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 {
|
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||||
return VerifyTableStart(verifier) &&
|
return VerifyTableStart(verifier) &&
|
||||||
|
VerifyField<flatbuffers::uoffset_t>(verifier, 4 /* breakpoints */) &&
|
||||||
|
verifier.Verify(breakpoints()) &&
|
||||||
verifier.EndTable();
|
verifier.EndTable();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -52,154 +75,175 @@ struct ListBreakpointsResponse FLATBUFFERS_FINAL_CLASS : private flatbuffers::Ta
|
||||||
struct ListBreakpointsResponseBuilder {
|
struct ListBreakpointsResponseBuilder {
|
||||||
flatbuffers::FlatBufferBuilder &fbb_;
|
flatbuffers::FlatBufferBuilder &fbb_;
|
||||||
flatbuffers::uoffset_t start_;
|
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(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
|
||||||
ListBreakpointsResponseBuilder &operator=(const ListBreakpointsResponseBuilder &);
|
ListBreakpointsResponseBuilder &operator=(const ListBreakpointsResponseBuilder &);
|
||||||
flatbuffers::Offset<ListBreakpointsResponse> Finish() {
|
flatbuffers::Offset<ListBreakpointsResponse> Finish() {
|
||||||
auto o = flatbuffers::Offset<ListBreakpointsResponse>(fbb_.EndTable(start_, 0));
|
auto o = flatbuffers::Offset<ListBreakpointsResponse>(fbb_.EndTable(start_, 1));
|
||||||
return o;
|
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);
|
ListBreakpointsResponseBuilder builder_(_fbb);
|
||||||
|
builder_.add_breakpoints(breakpoints);
|
||||||
return builder_.Finish();
|
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 {
|
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||||
return VerifyTableStart(verifier) &&
|
return VerifyTableStart(verifier) &&
|
||||||
verifier.EndTable();
|
verifier.EndTable();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AddBreakpointRequestBuilder {
|
struct AddBreakpointsResponseBuilder {
|
||||||
flatbuffers::FlatBufferBuilder &fbb_;
|
flatbuffers::FlatBufferBuilder &fbb_;
|
||||||
flatbuffers::uoffset_t start_;
|
flatbuffers::uoffset_t start_;
|
||||||
AddBreakpointRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
|
AddBreakpointsResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
|
||||||
AddBreakpointRequestBuilder &operator=(const AddBreakpointRequestBuilder &);
|
AddBreakpointsResponseBuilder &operator=(const AddBreakpointsResponseBuilder &);
|
||||||
flatbuffers::Offset<AddBreakpointRequest> Finish() {
|
flatbuffers::Offset<AddBreakpointsResponse> Finish() {
|
||||||
auto o = flatbuffers::Offset<AddBreakpointRequest>(fbb_.EndTable(start_, 0));
|
auto o = flatbuffers::Offset<AddBreakpointsResponse>(fbb_.EndTable(start_, 0));
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline flatbuffers::Offset<AddBreakpointRequest> CreateAddBreakpointRequest(flatbuffers::FlatBufferBuilder &_fbb) {
|
inline flatbuffers::Offset<AddBreakpointsResponse> CreateAddBreakpointsResponse(flatbuffers::FlatBufferBuilder &_fbb) {
|
||||||
AddBreakpointRequestBuilder builder_(_fbb);
|
AddBreakpointsResponseBuilder builder_(_fbb);
|
||||||
return builder_.Finish();
|
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 {
|
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||||
return VerifyTableStart(verifier) &&
|
return VerifyTableStart(verifier) &&
|
||||||
verifier.EndTable();
|
verifier.EndTable();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AddBreakpointResponseBuilder {
|
struct UpdateBreakpointsResponseBuilder {
|
||||||
flatbuffers::FlatBufferBuilder &fbb_;
|
flatbuffers::FlatBufferBuilder &fbb_;
|
||||||
flatbuffers::uoffset_t start_;
|
flatbuffers::uoffset_t start_;
|
||||||
AddBreakpointResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
|
UpdateBreakpointsResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
|
||||||
AddBreakpointResponseBuilder &operator=(const AddBreakpointResponseBuilder &);
|
UpdateBreakpointsResponseBuilder &operator=(const UpdateBreakpointsResponseBuilder &);
|
||||||
flatbuffers::Offset<AddBreakpointResponse> Finish() {
|
flatbuffers::Offset<UpdateBreakpointsResponse> Finish() {
|
||||||
auto o = flatbuffers::Offset<AddBreakpointResponse>(fbb_.EndTable(start_, 0));
|
auto o = flatbuffers::Offset<UpdateBreakpointsResponse>(fbb_.EndTable(start_, 0));
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline flatbuffers::Offset<AddBreakpointResponse> CreateAddBreakpointResponse(flatbuffers::FlatBufferBuilder &_fbb) {
|
inline flatbuffers::Offset<UpdateBreakpointsResponse> CreateUpdateBreakpointsResponse(flatbuffers::FlatBufferBuilder &_fbb) {
|
||||||
AddBreakpointResponseBuilder builder_(_fbb);
|
UpdateBreakpointsResponseBuilder builder_(_fbb);
|
||||||
return builder_.Finish();
|
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 {
|
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||||
return VerifyTableStart(verifier) &&
|
return VerifyTableStart(verifier) &&
|
||||||
verifier.EndTable();
|
verifier.EndTable();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UpdateBreakpointRequestBuilder {
|
struct RemoveBreakpointsResponseBuilder {
|
||||||
flatbuffers::FlatBufferBuilder &fbb_;
|
flatbuffers::FlatBufferBuilder &fbb_;
|
||||||
flatbuffers::uoffset_t start_;
|
flatbuffers::uoffset_t start_;
|
||||||
UpdateBreakpointRequestBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
|
RemoveBreakpointsResponseBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
|
||||||
UpdateBreakpointRequestBuilder &operator=(const UpdateBreakpointRequestBuilder &);
|
RemoveBreakpointsResponseBuilder &operator=(const RemoveBreakpointsResponseBuilder &);
|
||||||
flatbuffers::Offset<UpdateBreakpointRequest> Finish() {
|
flatbuffers::Offset<RemoveBreakpointsResponse> Finish() {
|
||||||
auto o = flatbuffers::Offset<UpdateBreakpointRequest>(fbb_.EndTable(start_, 0));
|
auto o = flatbuffers::Offset<RemoveBreakpointsResponse>(fbb_.EndTable(start_, 0));
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline flatbuffers::Offset<UpdateBreakpointRequest> CreateUpdateBreakpointRequest(flatbuffers::FlatBufferBuilder &_fbb) {
|
inline flatbuffers::Offset<RemoveBreakpointsResponse> CreateRemoveBreakpointsResponse(flatbuffers::FlatBufferBuilder &_fbb) {
|
||||||
UpdateBreakpointRequestBuilder builder_(_fbb);
|
RemoveBreakpointsResponseBuilder 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);
|
|
||||||
return builder_.Finish();
|
return builder_.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1 +1,5 @@
|
||||||
namespace xe.debug.proto;
|
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";
|
include "common.fbs";
|
||||||
|
|
||||||
namespace xe.debug.proto;
|
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 "breakpoints.fbs";
|
||||||
include "common.fbs";
|
include "common.fbs";
|
||||||
include "control.fbs";
|
include "control.fbs";
|
||||||
|
include "modules.fbs";
|
||||||
|
include "threads.fbs";
|
||||||
|
|
||||||
namespace xe.debug.proto;
|
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 {
|
table AttachRequest {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
@ -35,9 +19,17 @@ union RequestData {
|
||||||
AttachRequest,
|
AttachRequest,
|
||||||
|
|
||||||
ListBreakpointsRequest,
|
ListBreakpointsRequest,
|
||||||
AddBreakpointRequest,
|
AddBreakpointsRequest,
|
||||||
UpdateBreakpointRequest,
|
UpdateBreakpointsRequest,
|
||||||
RemoveBreakpointRequest,
|
RemoveBreakpointsRequest,
|
||||||
|
|
||||||
|
ListModulesRequest,
|
||||||
|
GetModuleRequest,
|
||||||
|
|
||||||
|
StopRequest,
|
||||||
|
BreakRequest,
|
||||||
|
ContinueRequest,
|
||||||
|
StepRequest,
|
||||||
}
|
}
|
||||||
|
|
||||||
table Request {
|
table Request {
|
||||||
|
@ -49,9 +41,20 @@ union ResponseData {
|
||||||
AttachResponse,
|
AttachResponse,
|
||||||
|
|
||||||
ListBreakpointsResponse,
|
ListBreakpointsResponse,
|
||||||
AddBreakpointResponse,
|
AddBreakpointsResponse,
|
||||||
UpdateBreakpointResponse,
|
UpdateBreakpointsResponse,
|
||||||
RemoveBreakpointResponse,
|
RemoveBreakpointsResponse,
|
||||||
|
|
||||||
|
ListModulesResponse,
|
||||||
|
GetModuleResponse,
|
||||||
|
|
||||||
|
StopResponse,
|
||||||
|
BreakResponse,
|
||||||
|
ContinueResponse,
|
||||||
|
StepResponse,
|
||||||
|
|
||||||
|
BreakpointEvent,
|
||||||
|
AccessViolationEvent,
|
||||||
}
|
}
|
||||||
|
|
||||||
table Response {
|
table Response {
|
||||||
|
|
|
@ -8,14 +8,58 @@
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace debug {
|
namespace debug {
|
||||||
namespace proto {
|
namespace proto {
|
||||||
|
struct XObject;
|
||||||
|
} // namespace proto
|
||||||
|
} // namespace debug
|
||||||
|
} // namespace xe
|
||||||
|
namespace xe {
|
||||||
|
namespace debug {
|
||||||
|
namespace proto {
|
||||||
|
struct Breakpoint;
|
||||||
struct ListBreakpointsRequest;
|
struct ListBreakpointsRequest;
|
||||||
struct ListBreakpointsResponse;
|
struct ListBreakpointsResponse;
|
||||||
struct AddBreakpointRequest;
|
struct AddBreakpointsRequest;
|
||||||
struct AddBreakpointResponse;
|
struct AddBreakpointsResponse;
|
||||||
struct UpdateBreakpointRequest;
|
struct UpdateBreakpointsRequest;
|
||||||
struct UpdateBreakpointResponse;
|
struct UpdateBreakpointsResponse;
|
||||||
struct RemoveBreakpointRequest;
|
struct RemoveBreakpointsRequest;
|
||||||
struct RemoveBreakpointResponse;
|
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 proto
|
||||||
} // namespace debug
|
} // namespace debug
|
||||||
} // namespace xe
|
} // namespace xe
|
||||||
|
@ -24,36 +68,28 @@ namespace xe {
|
||||||
namespace debug {
|
namespace debug {
|
||||||
namespace proto {
|
namespace proto {
|
||||||
|
|
||||||
struct StructTest;
|
|
||||||
struct TableTest;
|
|
||||||
struct AttachRequest;
|
struct AttachRequest;
|
||||||
struct AttachResponse;
|
struct AttachResponse;
|
||||||
struct Request;
|
struct Request;
|
||||||
struct Response;
|
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 {
|
enum RequestData {
|
||||||
RequestData_NONE = 0,
|
RequestData_NONE = 0,
|
||||||
RequestData_AttachRequest = 1,
|
RequestData_AttachRequest = 1,
|
||||||
RequestData_ListBreakpointsRequest = 2,
|
RequestData_ListBreakpointsRequest = 2,
|
||||||
RequestData_AddBreakpointRequest = 3,
|
RequestData_AddBreakpointsRequest = 3,
|
||||||
RequestData_UpdateBreakpointRequest = 4,
|
RequestData_UpdateBreakpointsRequest = 4,
|
||||||
RequestData_RemoveBreakpointRequest = 5
|
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() {
|
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;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,13 +101,21 @@ enum ResponseData {
|
||||||
ResponseData_NONE = 0,
|
ResponseData_NONE = 0,
|
||||||
ResponseData_AttachResponse = 1,
|
ResponseData_AttachResponse = 1,
|
||||||
ResponseData_ListBreakpointsResponse = 2,
|
ResponseData_ListBreakpointsResponse = 2,
|
||||||
ResponseData_AddBreakpointResponse = 3,
|
ResponseData_AddBreakpointsResponse = 3,
|
||||||
ResponseData_UpdateBreakpointResponse = 4,
|
ResponseData_UpdateBreakpointsResponse = 4,
|
||||||
ResponseData_RemoveBreakpointResponse = 5
|
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() {
|
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;
|
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);
|
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 {
|
struct AttachRequest FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||||
bool Verify(flatbuffers::Verifier &verifier) const {
|
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||||
return VerifyTableStart(verifier) &&
|
return VerifyTableStart(verifier) &&
|
||||||
|
@ -290,9 +270,15 @@ inline bool VerifyRequestData(flatbuffers::Verifier &verifier, const void *union
|
||||||
case RequestData_NONE: return true;
|
case RequestData_NONE: return true;
|
||||||
case RequestData_AttachRequest: return verifier.VerifyTable(reinterpret_cast<const AttachRequest *>(union_obj));
|
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_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_AddBreakpointsRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::AddBreakpointsRequest *>(union_obj));
|
||||||
case RequestData_UpdateBreakpointRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::UpdateBreakpointRequest *>(union_obj));
|
case RequestData_UpdateBreakpointsRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::UpdateBreakpointsRequest *>(union_obj));
|
||||||
case RequestData_RemoveBreakpointRequest: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::RemoveBreakpointRequest *>(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;
|
default: return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -302,9 +288,17 @@ inline bool VerifyResponseData(flatbuffers::Verifier &verifier, const void *unio
|
||||||
case ResponseData_NONE: return true;
|
case ResponseData_NONE: return true;
|
||||||
case ResponseData_AttachResponse: return verifier.VerifyTable(reinterpret_cast<const AttachResponse *>(union_obj));
|
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_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_AddBreakpointsResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::AddBreakpointsResponse *>(union_obj));
|
||||||
case ResponseData_UpdateBreakpointResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::UpdateBreakpointResponse *>(union_obj));
|
case ResponseData_UpdateBreakpointsResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::UpdateBreakpointsResponse *>(union_obj));
|
||||||
case ResponseData_RemoveBreakpointResponse: return verifier.VerifyTable(reinterpret_cast<const xe::debug::proto::RemoveBreakpointResponse *>(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;
|
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;
|
||||||
|
}
|
||||||
|
|