Browse Source

Added an options page for the debugger

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3163 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 18 years ago
parent
commit
866b0f92fe
  1. BIN
      data/resources/StringResources.nl.resources
  2. 13
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.addin
  3. 18
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj
  4. 70
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptions.cs
  5. 76
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.Designer.cs
  6. 47
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.cs
  7. 120
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.resx
  8. 68
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.Designer.cs
  9. 46
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.cs
  10. 120
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.resx
  11. 40
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.Menu.cs
  12. 9
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs
  13. 31
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs
  14. 12
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
  15. 15
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs
  16. 1
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj
  17. 84
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Module.cs
  18. 54
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/NDebugger.Options.cs
  19. 8
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs
  20. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/StackFrame.cs
  21. 9
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Stepper.cs
  22. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs
  23. 2
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs
  24. BIN
      src/Main/StartUp/Project/Resources/StringResources.resources

BIN
data/resources/StringResources.nl.resources

Binary file not shown.

13
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.addin

@ -63,4 +63,17 @@ @@ -63,4 +63,17 @@
shortcut = "Control|Alt|V"
class = "ICSharpCode.SharpDevelop.Gui.Pads.LocalVarPad"/>
</Path>
<Path name = "/SharpDevelop/Dialogs/OptionsDialog">
<DialogPanel id = "Debugging"
label = "${res:Dialog.Options.IDEOptions.Debugging}"
insertbefore = "TextEditorOptions">
<DialogPanel id = "General"
label = "${res:Dialog.Options.IDEOptions.Debugging.PanelName}"
class = "ICSharpCode.SharpDevelop.Gui.OptionPanels.DebuggingOptionsPanel"/>
<DialogPanel id = "Symbols"
label = "${res:Dialog.Options.IDEOptions.DebuggingSymbols.PanelName}"
class = "ICSharpCode.SharpDevelop.Gui.OptionPanels.DebuggingSymbolsPanel"/>
</DialogPanel>
</Path>
</AddIn>

18
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj

@ -46,6 +46,15 @@ @@ -46,6 +46,15 @@
<Compile Include="Src\Expressions\SimpleIdentifierExpression.cs" />
<Compile Include="Src\Expressions\SimpleMemberReferenceExpression.cs" />
<Compile Include="Src\Expressions\SimpleParser.cs" />
<Compile Include="Src\Options\DebuggingOptions.cs" />
<Compile Include="Src\Options\DebuggingOptionsPanel.cs" />
<Compile Include="Src\Options\DebuggingOptionsPanel.Designer.cs">
<DependentUpon>DebuggingOptionsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Src\Options\DebuggingSymbolsPanel.cs" />
<Compile Include="Src\Options\DebuggingSymbolsPanel.Designer.cs">
<DependentUpon>DebuggingSymbolsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Src\Pads\BreakPointsPad.cs" />
<Compile Include="Src\Pads\CallStackPad.cs" />
<Compile Include="Src\Pads\LoadedModulesPad.cs" />
@ -59,6 +68,12 @@ @@ -59,6 +68,12 @@
</Compile>
<Compile Include="Src\Service\RemotingConfigurationHelpper.cs" />
<Compile Include="Src\Service\WindowsDebugger.cs" />
<EmbeddedResource Include="Src\Options\DebuggingOptionsPanel.resx">
<DependentUpon>DebuggingOptionsPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Src\Options\DebuggingSymbolsPanel.resx">
<DependentUpon>DebuggingSymbolsPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Src\Service\DebuggerEventForm.resx">
<DependentUpon>DebuggerEventForm.cs</DependentUpon>
</EmbeddedResource>
@ -129,6 +144,7 @@ @@ -129,6 +144,7 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Src\Expressions" />
<Folder Include="Src\Options" />
<Folder Include="Src\TreeModel" />
<Folder Include="Src\TreeModel\Adapters" />
<Folder Include="Src\TreeModel\Extensions" />
@ -150,4 +166,4 @@ @@ -150,4 +166,4 @@
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
<Import Project="PostBuildEvent.proj" />
</Project>
</Project>

70
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptions.cs

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using Debugger;
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Debugging;
namespace ICSharpCode.SharpDevelop.Services
{
public static class DebuggingOptions
{
public static Properties DebuggingProperties {
get {
return PropertyService.Get("Debugging", new Properties());
}
}
public static bool ShowValuesInHexadecimal {
get { return DebuggingProperties.Get("ShowValuesInHexadecimal", false); }
set { DebuggingProperties.Set("ShowValuesInHexadecimal", value); }
}
public static bool ShowArgumentNames {
get { return DebuggingProperties.Get("ShowArgumentNames", true); }
set { DebuggingProperties.Set("ShowArgumentNames", value); }
}
public static bool ShowArgumentValues {
get { return DebuggingProperties.Get("ShowArgumentValues", true); }
set { DebuggingProperties.Set("ShowArgumentValues", value); }
}
public static bool ShowExternalMethods {
get { return DebuggingProperties.Get("ShowExternalMethods", false); }
set { DebuggingProperties.Set("ShowExternalMethods", value); }
}
public static bool JustMyCodeEnabled {
get { return DebuggingProperties.Get("JustMyCodeEnabled", true); }
set { DebuggingProperties.Set("JustMyCodeEnabled", value); }
}
public static bool ObeyDebuggerAttributes {
get { return DebuggingProperties.Get("ObeyDebuggerAttributes", true); }
set { DebuggingProperties.Set("ObeyDebuggerAttributes", value); }
}
public static string[] SymbolsSearchPaths {
get { return DebuggingProperties.Get("SymbolsSearchPaths", new string[0]); }
set { DebuggingProperties.Set("SymbolsSearchPaths", value); }
}
public static void ApplyToCurrentDebugger()
{
WindowsDebugger winDbg = DebuggerService.CurrentDebugger as WindowsDebugger;
if (winDbg != null && winDbg.DebuggerCore != null) {
NDebugger debugger = winDbg.DebuggerCore;
debugger.JustMyCodeEnabled = JustMyCodeEnabled;
debugger.ObeyDebuggerAttributes = ObeyDebuggerAttributes;
debugger.SymbolsSearchPaths = SymbolsSearchPaths;
}
}
}
}

76
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.Designer.cs generated

@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
{
public partial class DebuggingOptionsPanel
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Disposes resources used by the control.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
}
/// <summary>
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
/// </summary>
private void InitializeComponent()
{
this.jmc = new System.Windows.Forms.CheckBox();
this.obeyDebuggerAttributes = new System.Windows.Forms.CheckBox();
this.SuspendLayout();
//
// jmc
//
this.jmc.AutoSize = true;
this.jmc.Location = new System.Drawing.Point(13, 15);
this.jmc.Name = "jmc";
this.jmc.Size = new System.Drawing.Size(491, 24);
this.jmc.TabIndex = 0;
this.jmc.Text = "${res:Dialog.Options.IDEOptions.Debugging.EnableJustMyCode}";
this.jmc.UseVisualStyleBackColor = true;
//
// obeyDebuggerAttributes
//
this.obeyDebuggerAttributes.AutoSize = true;
this.obeyDebuggerAttributes.Location = new System.Drawing.Point(37, 45);
this.obeyDebuggerAttributes.Name = "obeyDebuggerAttributes";
this.obeyDebuggerAttributes.Size = new System.Drawing.Size(530, 24);
this.obeyDebuggerAttributes.TabIndex = 1;
this.obeyDebuggerAttributes.Text = "${res:Dialog.Options.IDEOptions.Debugging.ObeyDebuggerAttributes}";
this.obeyDebuggerAttributes.UseVisualStyleBackColor = true;
//
// DebuggingOptionsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.obeyDebuggerAttributes);
this.Controls.Add(this.jmc);
this.Name = "DebuggingOptionsPanel";
this.Size = new System.Drawing.Size(626, 300);
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.CheckBox obeyDebuggerAttributes;
private System.Windows.Forms.CheckBox jmc;
}
}

47
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.cs

@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Services;
namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
{
/// <summary>
/// Panel for general debugging options
/// </summary>
public partial class DebuggingOptionsPanel : AbstractOptionPanel
{
public DebuggingOptionsPanel()
{
InitializeComponent();
foreach (Control ctl in Controls.GetRecursive()) {
ctl.Text = StringParser.Parse(ctl.Text);
}
}
public override void LoadPanelContents()
{
jmc.Checked = DebuggingOptions.JustMyCodeEnabled;
obeyDebuggerAttributes.Checked = DebuggingOptions.ObeyDebuggerAttributes;
}
public override bool StorePanelContents()
{
DebuggingOptions.JustMyCodeEnabled = jmc.Checked;
DebuggingOptions.ObeyDebuggerAttributes = obeyDebuggerAttributes.Checked;
DebuggingOptions.ApplyToCurrentDebugger();
return true;
}
}
}

120
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.resx

@ -0,0 +1,120 @@ @@ -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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

68
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.Designer.cs generated

@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
{
partial class DebuggingSymbolsPanel
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Disposes resources used by the form.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
}
/// <summary>
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
/// </summary>
private void InitializeComponent()
{
this.pathList = new ICSharpCode.SharpDevelop.Gui.StringListEditor();
this.SuspendLayout();
//
// pathList
//
this.pathList.AddButtonText = "${res:Global.AddButtonText}";
this.pathList.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.pathList.AutoAddAfterBrowse = true;
this.pathList.BrowseForDirectory = true;
this.pathList.ListCaption = "${res:Dialog.Options.IDEOptions.DebuggingSymbols.ListCaption}";
this.pathList.Location = new System.Drawing.Point(0, 0);
this.pathList.ManualOrder = true;
this.pathList.Name = "pathList";
this.pathList.Size = new System.Drawing.Size(349, 295);
this.pathList.TabIndex = 4;
this.pathList.TitleText = "${res:Global.Folder}:";
//
// DebuggingSymbolsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.pathList);
this.Name = "DebuggingSymbolsPanel";
this.Size = new System.Drawing.Size(352, 298);
this.ResumeLayout(false);
}
private ICSharpCode.SharpDevelop.Gui.StringListEditor pathList;
}
}

46
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.cs

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Services;
namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
{
/// <summary>
/// Options panel which allows user to specify where to look
/// for symbols (pdb files) and source codes
/// </summary>
public partial class DebuggingSymbolsPanel : AbstractOptionPanel
{
public DebuggingSymbolsPanel()
{
InitializeComponent();
foreach (Control ctl in Controls.GetRecursive()) {
ctl.Text = StringParser.Parse(ctl.Text);
}
}
public override void LoadPanelContents()
{
pathList.LoadList(DebuggingOptions.SymbolsSearchPaths);
}
public override bool StorePanelContents()
{
DebuggingOptions.SymbolsSearchPaths = pathList.GetList();
DebuggingOptions.ApplyToCurrentDebugger();
return true;
}
}
}

120
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.resx

@ -0,0 +1,120 @@ @@ -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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

40
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.Menu.cs

@ -42,38 +42,12 @@ using System.ComponentModel; @@ -42,38 +42,12 @@ using System.ComponentModel;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Services;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public partial class CallStackPad
{
public bool ShowArgumentNames {
get {
return debugger.Properties.Get("ShowArgumentNames", true);
}
set {
debugger.Properties.Set("ShowArgumentNames", value);
}
}
public bool ShowArgumentValues {
get {
return debugger.Properties.Get("ShowArgumentValues", true);
}
set {
debugger.Properties.Set("ShowArgumentValues", value);
}
}
public bool ShowExternalMethods {
get {
return debugger.Properties.Get("ShowExternalMethods", false);
}
set {
debugger.Properties.Set("ShowExternalMethods", value);
}
}
ContextMenuStrip CreateContextMenuStrip()
{
ContextMenuStrip menu = new ContextMenuStrip();
@ -89,27 +63,27 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -89,27 +63,27 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
ToolStripMenuItem argNamesItem;
argNamesItem = new ToolStripMenuItem();
argNamesItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowArgumentNames");
argNamesItem.Checked = ShowArgumentNames;
argNamesItem.Checked = DebuggingOptions.ShowArgumentNames;
argNamesItem.Click += delegate {
ShowArgumentNames = !ShowArgumentNames;
DebuggingOptions.ShowArgumentNames = !DebuggingOptions.ShowArgumentNames;
RefreshPad();
};
ToolStripMenuItem argValuesItem;
argValuesItem = new ToolStripMenuItem();
argValuesItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowArgumentValues");
argValuesItem.Checked = ShowArgumentValues;
argValuesItem.Checked = DebuggingOptions.ShowArgumentValues;
argValuesItem.Click += delegate {
ShowArgumentValues = !ShowArgumentValues;
DebuggingOptions.ShowArgumentValues = !DebuggingOptions.ShowArgumentValues;
RefreshPad();
};
ToolStripMenuItem extMethodsItem;
extMethodsItem = new ToolStripMenuItem();
extMethodsItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowExternalMethods");
extMethodsItem.Checked = ShowExternalMethods;
extMethodsItem.Checked = DebuggingOptions.ShowExternalMethods;
extMethodsItem.Click += delegate {
ShowExternalMethods = !ShowExternalMethods;
DebuggingOptions.ShowExternalMethods = !DebuggingOptions.ShowExternalMethods;
RefreshPad();
};

9
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs

@ -42,10 +42,11 @@ using System.Collections.Generic; @@ -42,10 +42,11 @@ using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Debugger;
using Debugger.AddIn.TreeModel;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Services;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
@ -148,7 +149,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -148,7 +149,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
public List<ListViewItem> CreateItems()
{
bool showExternalMethods = ShowExternalMethods;
bool showExternalMethods = DebuggingOptions.ShowExternalMethods;
bool lastItemIsExternalMethod = false;
List<ListViewItem> items = new List<ListViewItem>();
@ -199,8 +200,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -199,8 +200,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
public string GetFullName(StackFrame frame)
{
bool showArgumentNames = ShowArgumentNames;
bool showArgumentValues = ShowArgumentValues;
bool showArgumentNames = DebuggingOptions.ShowArgumentNames;
bool showArgumentValues = DebuggingOptions.ShowArgumentValues;
StringBuilder name = new StringBuilder();
name.Append(frame.MethodInfo.Name);

31
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs

@ -137,18 +137,31 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -137,18 +137,31 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void AddModule(Module module)
{
ListViewItem newItem = new ListViewItem(new string[] {module.Filename,
String.Format("{0:X8}", module.BaseAdress),
module.DirectoryName,
module.OrderOfLoading.ToString(),
"",
"",
"",
StringParser.Parse(module.SymbolsLoaded ? "${res:MainWindow.Windows.Debug.Modules.HasSymbols}" : "${res:MainWindow.Windows.Debug.Modules.HasNoSymbols}")
});
ListViewItem newItem = new ListViewItem();
newItem.Tag = module;
RefreshItem(newItem);
module.SymbolsLoaded += delegate { RefreshItem(newItem); };
loadedModulesList.Items.Add(newItem);
}
void RefreshItem(ListViewItem item)
{
Module module = (Module)item.Tag;
item.SubItems.Clear();
item.SubItems.AddRange(
new string[] {
module.Filename,
String.Format("{0:X8}", module.BaseAdress),
module.DirectoryName,
module.OrderOfLoading.ToString(),
"",
"",
"",
StringParser.Parse(module.HasSymbols ? "${res:MainWindow.Windows.Debug.Modules.HasSymbols}" : "${res:MainWindow.Windows.Debug.Modules.HasNoSymbols}")
}
);
item.SubItems.RemoveAt(0);
}
void RemoveModule(Module module)
{

12
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs

@ -60,8 +60,6 @@ namespace ICSharpCode.SharpDevelop.Services @@ -60,8 +60,6 @@ namespace ICSharpCode.SharpDevelop.Services
NDebugger debugger;
Properties properties;
Debugger.Process debuggedProcess;
DynamicTreeDebuggerRow currentTooltipRow;
@ -88,12 +86,6 @@ namespace ICSharpCode.SharpDevelop.Services @@ -88,12 +86,6 @@ namespace ICSharpCode.SharpDevelop.Services
}
}
public Properties Properties {
get {
return properties;
}
}
public bool ServiceInitialized {
get {
return debugger != null;
@ -102,7 +94,7 @@ namespace ICSharpCode.SharpDevelop.Services @@ -102,7 +94,7 @@ namespace ICSharpCode.SharpDevelop.Services
public WindowsDebugger()
{
properties = PropertyService.Get("DebuggerProperties", new Properties());
}
#region IDebugger Members
@ -376,6 +368,8 @@ namespace ICSharpCode.SharpDevelop.Services @@ -376,6 +368,8 @@ namespace ICSharpCode.SharpDevelop.Services
debugger = new NDebugger();
DebuggingOptions.ApplyToCurrentDebugger();
debugger.DebuggerTraceMessage += debugger_TraceMessage;
debugger.ProcessStarted += debugger_ProcessStarted;
debugger.ProcessExited += debugger_ProcessExited;

15
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs

@ -78,7 +78,7 @@ namespace Debugger.AddIn.TreeModel @@ -78,7 +78,7 @@ namespace Debugger.AddIn.TreeModel
this.Name = val.Expression.CodeTail;
if (ShowValuesInHexadecimal && val.IsInteger) {
if (DebuggingOptions.ShowValuesInHexadecimal && val.IsInteger) {
this.Text = String.Format("0x{0:X}", val.PrimitiveValue);
} else {
this.Text = val.AsString;
@ -147,9 +147,9 @@ namespace Debugger.AddIn.TreeModel @@ -147,9 +147,9 @@ namespace Debugger.AddIn.TreeModel
ToolStripMenuItem hexView;
hexView = new ToolStripMenuItem();
hexView.Text = ResourceService.GetString("MainWindow.Windows.Debug.LocalVariables.ShowInHexadecimal");
hexView.Checked = ShowValuesInHexadecimal;
hexView.Checked = DebuggingOptions.ShowValuesInHexadecimal;
hexView.Click += delegate {
ShowValuesInHexadecimal = !ShowValuesInHexadecimal;
DebuggingOptions.ShowValuesInHexadecimal = !DebuggingOptions.ShowValuesInHexadecimal;
};
menu.Items.AddRange(new ToolStripItem[] {
@ -165,14 +165,5 @@ namespace Debugger.AddIn.TreeModel @@ -165,14 +165,5 @@ namespace Debugger.AddIn.TreeModel
return (WindowsDebugger)DebuggerService.CurrentDebugger;
}
}
public static bool ShowValuesInHexadecimal {
get {
return WindowsDebugger.Properties.Get("ShowValuesInHexadecimal", false);
}
set {
WindowsDebugger.Properties.Set("ShowValuesInHexadecimal", value);
}
}
}
}

1
src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj

@ -45,6 +45,7 @@ @@ -45,6 +45,7 @@
<Compile Include="Src\Control\NDebugger-Breakpoints.cs" />
<Compile Include="Src\Control\NDebugger-Processes.cs" />
<Compile Include="Src\Control\NDebugger.cs" />
<Compile Include="Src\Control\NDebugger.Options.cs" />
<Compile Include="Src\Control\Process-Evals.cs" />
<Compile Include="Src\Control\Process-Modules.cs" />
<Compile Include="Src\Control\Process-StateControl.cs" />

84
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Module.cs

@ -27,6 +27,15 @@ namespace Debugger @@ -27,6 +27,15 @@ namespace Debugger
ISymUnmanagedReader symReader;
MetaDataImport metaData;
public event EventHandler<ModuleEventArgs> SymbolsLoaded;
protected virtual void OnSymbolsLoaded(ModuleEventArgs e)
{
if (SymbolsLoaded != null) {
SymbolsLoaded(this, e);
}
}
[Debugger.Tests.Ignore]
public Process Process {
get {
@ -119,7 +128,7 @@ namespace Debugger @@ -119,7 +128,7 @@ namespace Debugger
}
}
public bool SymbolsLoaded {
public bool HasSymbols {
get {
return symReader != null;
}
@ -134,15 +143,6 @@ namespace Debugger @@ -134,15 +143,6 @@ namespace Debugger
}
}
public bool JMCStatus {
set {
uint unused = 0;
if (corModule.Is<ICorDebugModule2>()) { // Is the debuggee .NET 2.0?
(corModule.CastTo<ICorDebugModule2>()).SetJMCStatus(value?1:0, 0, ref unused);
}
}
}
/// <summary> Get all non-generic types defined in this module </summary>
public List<DebugType> GetDefinedTypes()
{
@ -169,40 +169,54 @@ namespace Debugger @@ -169,40 +169,54 @@ namespace Debugger
fullPath = pModule.Name;
symReader = metaData.GetSymReader(fullPath, null);
JMCStatus = SymbolsLoaded;
FindNonUserCode();
LoadSymbols(process.Debugger.SymbolsSearchPaths);
SetJustMyCodeStatus(this.HasSymbols, process.Debugger.ObeyDebuggerAttributes);
}
public void LoadSymbols(string[] searchPath)
{
if (symReader == null) {
symReader = metaData.GetSymReader(fullPath, string.Join("; ", searchPath ?? new string[0]));
if (symReader != null) {
process.OnModuleSymbolsLoaded(new ModuleEventArgs(this));
OnSymbolsLoaded(new ModuleEventArgs(this));
}
}
}
/// <summary>
/// Finds all classes and methods marked with DebuggerNonUserCode attribute
/// and it marks them for JMC so that they are not stepped into
/// and marks them for JMC so that they are not stepped into
/// </summary>
void FindNonUserCode()
public void SetJustMyCodeStatus(bool isMyCode, bool obeyAttributes)
{
if (this.SymbolsLoaded) {
foreach(CustomAttributeProps ca in metaData.EnumCustomAttributeProps(0, 0)) {
MemberRefProps constructorMethod = metaData.GetMemberRefProps(ca.Type);
TypeRefProps attributeType = metaData.GetTypeRefProps(constructorMethod.DeclaringType);
if (attributeType.Name == "System.Diagnostics.DebuggerStepThroughAttribute" ||
attributeType.Name == "System.Diagnostics.DebuggerNonUserCodeAttribute" ||
attributeType.Name == "System.Diagnostics.DebuggerHiddenAttribute")
{
if (ca.Owner >> 24 == 0x02) { // TypeDef
ICorDebugClass2 corClass = corModule.GetClassFromToken(ca.Owner).CastTo<ICorDebugClass2>();
corClass.SetJMCStatus(0 /* false */);
this.Process.TraceMessage("Class {0} marked as non-user code", metaData.GetTypeDefProps(ca.Owner).Name);
}
if (ca.Owner >> 24 == 0x06) { // MethodDef
ICorDebugFunction2 corFunction = corModule.GetFunctionFromToken(ca.Owner).CastTo<ICorDebugFunction2>();
corFunction.SetJMCStatus(0 /* false */);
MethodProps methodProps = metaData.GetMethodProps(ca.Owner);
this.Process.TraceMessage("Function {0}.{1} marked as non-user code", metaData.GetTypeDefProps(methodProps.ClassToken).Name, methodProps.Name);
uint unused = 0;
if (isMyCode) {
corModule.CastTo<ICorDebugModule2>().SetJMCStatus(1, 0, ref unused);
if (obeyAttributes) {
foreach(CustomAttributeProps ca in metaData.EnumCustomAttributeProps(0, 0)) {
MemberRefProps constructorMethod = metaData.GetMemberRefProps(ca.Type);
TypeRefProps attributeType = metaData.GetTypeRefProps(constructorMethod.DeclaringType);
if (attributeType.Name == "System.Diagnostics.DebuggerStepThroughAttribute" ||
attributeType.Name == "System.Diagnostics.DebuggerNonUserCodeAttribute" ||
attributeType.Name == "System.Diagnostics.DebuggerHiddenAttribute")
{
if (ca.Owner >> 24 == 0x02) { // TypeDef
ICorDebugClass2 corClass = corModule.GetClassFromToken(ca.Owner).CastTo<ICorDebugClass2>();
corClass.SetJMCStatus(0 /* false */);
this.Process.TraceMessage("Class {0} marked as non-user code", metaData.GetTypeDefProps(ca.Owner).Name);
}
if (ca.Owner >> 24 == 0x06) { // MethodDef
ICorDebugFunction2 corFunction = corModule.GetFunctionFromToken(ca.Owner).CastTo<ICorDebugFunction2>();
corFunction.SetJMCStatus(0 /* false */);
MethodProps methodProps = metaData.GetMethodProps(ca.Owner);
this.Process.TraceMessage("Function {0}.{1} marked as non-user code", metaData.GetTypeDefProps(methodProps.ClassToken).Name, methodProps.Name);
}
}
}
}
} else {
corModule.CastTo<ICorDebugModule2>().SetJMCStatus(0, 0, ref unused);
}
}

54
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/NDebugger.Options.cs

@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
namespace Debugger
{
public partial class NDebugger
{
bool justMyCodeEnabled;
bool obeyDebuggerAttributes;
string[] symbolsSearchPaths;
public bool JustMyCodeEnabled {
get { return justMyCodeEnabled; }
// Affects steppers during their creation so there is nothing to update
set { justMyCodeEnabled = value; }
}
public bool ObeyDebuggerAttributes {
get { return obeyDebuggerAttributes; }
set {
if (obeyDebuggerAttributes != value) {
obeyDebuggerAttributes = value;
foreach(Process process in this.Processes) {
foreach(Module module in process.Modules) {
// Rechceck the module for attributes
module.SetJustMyCodeStatus(module.HasSymbols, obeyDebuggerAttributes);
}
}
}
}
}
public string[] SymbolsSearchPaths {
get { return symbolsSearchPaths; }
set {
if (symbolsSearchPaths != value) {
symbolsSearchPaths = value;
foreach(Process process in this.Processes) {
foreach(Module module in process.Modules) {
// Try to load the symbols
module.LoadSymbols(symbolsSearchPaths);
}
}
}
}
}
}
}

8
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs

@ -20,6 +20,7 @@ namespace Debugger @@ -20,6 +20,7 @@ namespace Debugger
public event EventHandler<ModuleEventArgs> ModuleLoaded;
public event EventHandler<ModuleEventArgs> ModuleUnloaded;
public event EventHandler<ModuleEventArgs> ModuleSymbolsLoaded;
protected void OnModuleLoaded(Module module)
{
@ -34,6 +35,13 @@ namespace Debugger @@ -34,6 +35,13 @@ namespace Debugger
ModuleUnloaded(this, new ModuleEventArgs(module));
}
}
internal virtual void OnModuleSymbolsLoaded(ModuleEventArgs e)
{
if (ModuleSymbolsLoaded != null) {
ModuleSymbolsLoaded(this, e);
}
}
public IList<Module> Modules {
get{

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/StackFrame.cs

@ -162,7 +162,7 @@ namespace Debugger @@ -162,7 +162,7 @@ namespace Debugger
void AsyncStep(bool stepIn)
{
if (this.MethodInfo.Module.SymbolsLoaded == false) {
if (this.MethodInfo.Module.HasSymbols == false) {
throw new DebuggerException("Unable to step. No symbols loaded.");
}

9
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Stepper.cs

@ -59,9 +59,12 @@ namespace Debugger @@ -59,9 +59,12 @@ namespace Debugger
public bool JustMyCode {
set {
if (corStepper.Is<ICorDebugStepper2>()) { // Is the debuggee .NET 2.0?
if (value) {
corStepper.SetUnmappedStopMask(CorDebugUnmappedStop.STOP_NONE);
corStepper.CastTo<ICorDebugStepper2>().SetJMC(value ? 1 : 0);
corStepper.CastTo<ICorDebugStepper2>().SetJMC(1);
} else {
corStepper.SetUnmappedStopMask(CorDebugUnmappedStop.STOP_NONE);
corStepper.CastTo<ICorDebugStepper2>().SetJMC(0);
}
}
}
@ -77,7 +80,7 @@ namespace Debugger @@ -77,7 +80,7 @@ namespace Debugger
corStepper = stackFrame.CorILFrame.CreateStepper();
JustMyCode = true;
this.JustMyCode = Process.Debugger.JustMyCodeEnabled;
stackFrame.Thread.Steppers.Add(this);
}

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs

@ -298,7 +298,7 @@ namespace Debugger @@ -298,7 +298,7 @@ namespace Debugger
public string GetStackTrace()
{
return GetStackTrace("at {0} in {1}:line {2}", "at {0} in {1}");
return GetStackTrace("at {0} in {1}:line {2}", "at {0}");
}
public string GetStackTrace(string formatSymbols, string formatNoSymbols)

2
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs

@ -145,7 +145,7 @@ namespace Debugger.Tests @@ -145,7 +145,7 @@ namespace Debugger.Tests
LogEvent("LogMessage", e.Message.Replace("\r",@"\r").Replace("\n",@"\n"));
};
process.ModuleLoaded += delegate(object sender, ModuleEventArgs e) {
LogEvent("ModuleLoaded", e.Module.Filename + (e.Module.SymbolsLoaded ? " (Has symbols)" : " (No symbols)"));
LogEvent("ModuleLoaded", e.Module.Filename + (e.Module.HasSymbols ? " (Has symbols)" : " (No symbols)"));
};
process.Paused += delegate(object sender, ProcessEventArgs e) {
LogEvent("DebuggingPaused", e.Process.PauseSession.PausedReason.ToString());

BIN
src/Main/StartUp/Project/Resources/StringResources.resources

Binary file not shown.
Loading…
Cancel
Save