From 866b0f92fedf19ce20352314cb0a885de8f6b447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Srbeck=C3=BD?= Date: Thu, 3 Jul 2008 18:59:06 +0000 Subject: [PATCH] Added an options page for the debugger git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3163 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- data/resources/StringResources.nl.resources | Bin 308420 -> 309082 bytes .../Project/Debugger.AddIn.addin | 13 ++ .../Project/Debugger.AddIn.csproj | 18 ++- .../Project/Src/Options/DebuggingOptions.cs | 70 ++++++++++ .../Options/DebuggingOptionsPanel.Designer.cs | 76 +++++++++++ .../Src/Options/DebuggingOptionsPanel.cs | 47 +++++++ .../Src/Options/DebuggingOptionsPanel.resx | 120 ++++++++++++++++++ .../Options/DebuggingSymbolsPanel.Designer.cs | 68 ++++++++++ .../Src/Options/DebuggingSymbolsPanel.cs | 46 +++++++ .../Src/Options/DebuggingSymbolsPanel.resx | 120 ++++++++++++++++++ .../Project/Src/Pads/CallStackPad.Menu.cs | 40 +----- .../Project/Src/Pads/CallStackPad.cs | 9 +- .../Project/Src/Pads/LoadedModulesPad.cs | 31 +++-- .../Project/Src/Service/WindowsDebugger.cs | 12 +- .../Project/Src/TreeModel/ValueNode.cs | 15 +-- .../Project/Debugger.Core.csproj | 1 + .../Project/Src/Control/Module.cs | 84 +++++++----- .../Project/Src/Control/NDebugger.Options.cs | 54 ++++++++ .../Project/Src/Control/Process-Modules.cs | 8 ++ .../Project/Src/Control/StackFrame.cs | 2 +- .../Project/Src/Control/Stepper.cs | 9 +- .../Project/Src/Control/Thread.cs | 2 +- .../Project/Src/DebuggerTestsBase.cs | 2 +- .../Resources/StringResources.resources | Bin 300231 -> 301221 bytes 24 files changed, 738 insertions(+), 109 deletions(-) create mode 100644 src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptions.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.Designer.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.resx create mode 100644 src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.Designer.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.resx create mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/NDebugger.Options.cs diff --git a/data/resources/StringResources.nl.resources b/data/resources/StringResources.nl.resources index fb328abf6959774f7d433f193446e880497fc21c..8a2d5dfcf98227156a4329ee064dcf3bd7dd7f1c 100644 GIT binary patch delta 36389 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ኴjyxC(G|#xaB~MDOGg^9 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 Bot^*y diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.addin b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.addin index 767259fb88..1be6f4314e 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.addin +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.addin @@ -63,4 +63,17 @@ shortcut = "Control|Alt|V" class = "ICSharpCode.SharpDevelop.Gui.Pads.LocalVarPad"/> + + + + + + + diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj index 99eb227ce4..860e03ffee 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj @@ -46,6 +46,15 @@ + + + + DebuggingOptionsPanel.cs + + + + DebuggingSymbolsPanel.cs + @@ -59,6 +68,12 @@ + + DebuggingOptionsPanel.cs + + + DebuggingSymbolsPanel.cs + DebuggerEventForm.cs @@ -129,6 +144,7 @@ + @@ -150,4 +166,4 @@ - \ No newline at end of file + diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptions.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptions.cs new file mode 100644 index 0000000000..d6882a119c --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptions.cs @@ -0,0 +1,70 @@ +// +// +// +// +// $Revision$ +// + +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; + } + } + } +} diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.Designer.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.Designer.cs new file mode 100644 index 0000000000..df37523678 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.Designer.cs @@ -0,0 +1,76 @@ +// +// +// +// +// $Revision$ +// + +namespace ICSharpCode.SharpDevelop.Gui.OptionPanels +{ + public partial class DebuggingOptionsPanel + { + /// + /// Designer variable used to keep track of non-visual components. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Disposes resources used by the control. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + /// + /// 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. + /// + 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; + } +} diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.cs new file mode 100644 index 0000000000..d509fd5a35 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.cs @@ -0,0 +1,47 @@ +// +// +// +// +// $Revision$ +// + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +using ICSharpCode.Core; +using ICSharpCode.SharpDevelop.Services; + +namespace ICSharpCode.SharpDevelop.Gui.OptionPanels +{ + /// + /// Panel for general debugging options + /// + 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; + } + } +} diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.resx b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.resx new file mode 100644 index 0000000000..7080a7d118 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingOptionsPanel.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.Designer.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.Designer.cs new file mode 100644 index 0000000000..500c965a31 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.Designer.cs @@ -0,0 +1,68 @@ +// +// +// +// +// $Revision$ +// + +namespace ICSharpCode.SharpDevelop.Gui.OptionPanels +{ + partial class DebuggingSymbolsPanel + { + /// + /// Designer variable used to keep track of non-visual components. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Disposes resources used by the form. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + /// + /// 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. + /// + 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; + } +} diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.cs new file mode 100644 index 0000000000..4c1e19b427 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.cs @@ -0,0 +1,46 @@ +// +// +// +// +// $Revision$ +// + +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 +{ + /// + /// Options panel which allows user to specify where to look + /// for symbols (pdb files) and source codes + /// + 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; + } + } +} diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.resx b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.resx new file mode 100644 index 0000000000..7080a7d118 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Options/DebuggingSymbolsPanel.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.Menu.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.Menu.cs index 01ccc2fa5c..e08ea05d40 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.Menu.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.Menu.cs @@ -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 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(); }; diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs index ca6cd3d844..63e6e91867 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs @@ -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 public List CreateItems() { - bool showExternalMethods = ShowExternalMethods; + bool showExternalMethods = DebuggingOptions.ShowExternalMethods; bool lastItemIsExternalMethod = false; List items = new List(); @@ -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); diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs index d595f39c85..e0ffbf0e80 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs @@ -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) { diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs index 4db89ef821..71395ae354 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs @@ -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 } } - public Properties Properties { - get { - return properties; - } - } - public bool ServiceInitialized { get { return debugger != null; @@ -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 debugger = new NDebugger(); + DebuggingOptions.ApplyToCurrentDebugger(); + debugger.DebuggerTraceMessage += debugger_TraceMessage; debugger.ProcessStarted += debugger_ProcessStarted; debugger.ProcessExited += debugger_ProcessExited; diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs index 17e6b33459..269b82d2da 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs @@ -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 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 return (WindowsDebugger)DebuggerService.CurrentDebugger; } } - - public static bool ShowValuesInHexadecimal { - get { - return WindowsDebugger.Properties.Get("ShowValuesInHexadecimal", false); - } - set { - WindowsDebugger.Properties.Set("ShowValuesInHexadecimal", value); - } - } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj index 0ef2c16b5c..cfc3d53c84 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj @@ -45,6 +45,7 @@ + diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Module.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Module.cs index fb1bb4a678..975a758fe4 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Module.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Module.cs @@ -27,6 +27,15 @@ namespace Debugger ISymUnmanagedReader symReader; MetaDataImport metaData; + public event EventHandler 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 } } - public bool SymbolsLoaded { + public bool HasSymbols { get { return symReader != null; } @@ -134,15 +143,6 @@ namespace Debugger } } - public bool JMCStatus { - set { - uint unused = 0; - if (corModule.Is()) { // Is the debuggee .NET 2.0? - (corModule.CastTo()).SetJMCStatus(value?1:0, 0, ref unused); - } - } - } - /// Get all non-generic types defined in this module public List GetDefinedTypes() { @@ -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)); + } + } } /// /// 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 /// - 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(); - 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(); - 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().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(); + 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(); + 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().SetJMCStatus(0, 0, ref unused); } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/NDebugger.Options.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/NDebugger.Options.cs new file mode 100644 index 0000000000..189b7a96c0 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/NDebugger.Options.cs @@ -0,0 +1,54 @@ +// +// +// +// +// $Revision$ +// + +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); + } + } + } + } + } + } +} diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs index d08354e5bb..a4b9dbf3e1 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs @@ -20,6 +20,7 @@ namespace Debugger public event EventHandler ModuleLoaded; public event EventHandler ModuleUnloaded; + public event EventHandler ModuleSymbolsLoaded; protected void OnModuleLoaded(Module module) { @@ -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 Modules { get{ diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/StackFrame.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/StackFrame.cs index 7f715f0261..36f63d8df6 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/StackFrame.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/StackFrame.cs @@ -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."); } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Stepper.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Stepper.cs index 4ed8e21e26..640fcb2b6b 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Stepper.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Stepper.cs @@ -59,9 +59,12 @@ namespace Debugger public bool JustMyCode { set { - if (corStepper.Is()) { // Is the debuggee .NET 2.0? + if (value) { corStepper.SetUnmappedStopMask(CorDebugUnmappedStop.STOP_NONE); - corStepper.CastTo().SetJMC(value ? 1 : 0); + corStepper.CastTo().SetJMC(1); + } else { + corStepper.SetUnmappedStopMask(CorDebugUnmappedStop.STOP_NONE); + corStepper.CastTo().SetJMC(0); } } } @@ -77,7 +80,7 @@ namespace Debugger corStepper = stackFrame.CorILFrame.CreateStepper(); - JustMyCode = true; + this.JustMyCode = Process.Debugger.JustMyCodeEnabled; stackFrame.Thread.Steppers.Add(this); } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs index 5286b27375..fd7f835298 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs @@ -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) diff --git a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs index af425ced19..3277db7897 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs @@ -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()); diff --git a/src/Main/StartUp/Project/Resources/StringResources.resources b/src/Main/StartUp/Project/Resources/StringResources.resources index 3103bb54abcc5b70461215633c4220fb18abec00..0a1797f814145ecdc987ef82097b99224d02d04d 100644 GIT binary patch delta 36568 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 LJ~KZv+mQ8drf&X@ delta 36502 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