Browse Source

Worked on variable updating; Properties in debugger tooltips

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@877 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
18bd451e71
  1. 6
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs
  2. 2
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs
  3. 12
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs
  4. 5
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/TreeListViewDebuggerItem.cs
  5. 36
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/DynamicTreeDebuggerRow.cs
  6. 43
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
  7. 44
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger-StateControl.cs
  8. 9
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Modules/Module.cs
  9. 4
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs
  10. 20
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Variable.cs

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

@ -74,8 +74,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -74,8 +74,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.DebuggingPaused += new EventHandler<DebuggingPausedEventArgs>(DebuggingPaused);
debuggerCore.DebuggingResumed += new EventHandler<DebuggerEventArgs>(DebuggingResumed);
debuggerCore.DebuggeeStateChanged += DebuggeeStateChanged;
debuggerCore.DebuggingResumed += DebuggingResumed;
RefreshList();
}
@ -180,7 +180,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -180,7 +180,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
}
}
void DebuggingPaused(object sender, DebuggingPausedEventArgs e)
void DebuggeeStateChanged(object sender, DebuggerEventArgs e)
{
RefreshList();
}

2
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs

@ -85,6 +85,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -85,6 +85,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.DebuggeeStateChanged += delegate { debuggerCore.LocalVariables.Update(); };
localVarList.BeginUpdate();
AddVariableCollectionToTree(debuggerCore.LocalVariables, localVarList.Items);
localVarList.EndUpdate();

12
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
// <file>
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
@ -80,10 +80,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -80,10 +80,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.DebuggingPaused += new EventHandler<DebuggingPausedEventArgs>(OnDebuggingPaused);
debuggerCore.ThreadStarted += new EventHandler<ThreadEventArgs>(ThreadStarted);
debuggerCore.ThreadStateChanged += new EventHandler<ThreadEventArgs>(ThreadStateChanged);
debuggerCore.ThreadExited += new EventHandler<ThreadEventArgs>(ThreadExited);
debuggerCore.DebuggeeStateChanged += DebuggeeStateChanged;
debuggerCore.ThreadStarted += ThreadStarted;
debuggerCore.ThreadStateChanged += ThreadStateChanged;
debuggerCore.ThreadExited += ThreadExited;
RefreshList();
}
@ -166,7 +166,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -166,7 +166,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
}
}
void OnDebuggingPaused(object sender, DebuggingPausedEventArgs e)
void DebuggeeStateChanged(object sender, DebuggerEventArgs e)
{
RefreshList();
}

5
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/TreeListViewDebuggerItem.cs

@ -66,7 +66,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -66,7 +66,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
if (this.SubItems[2].Text != Variable.Value.Type)
this.SubItems[2].Text = Variable.Value.Type;
this.ImageIndex = DebuggerIcons.GetImageListIndex(variable);
int imageIndex = DebuggerIcons.GetImageListIndex(variable);
if (this.ImageIndex != imageIndex) {
this.ImageIndex = imageIndex;
}
if (IsExpanded) {
variable.SubVariables.Update();

36
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/DynamicTreeDebuggerRow.cs

@ -9,6 +9,7 @@ using System; @@ -9,6 +9,7 @@ using System;
using System.Drawing;
using System.Windows.Forms;
using Debugger;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Gui.TreeGrid;
@ -23,6 +24,7 @@ namespace ICSharpCode.SharpDevelop.Services @@ -23,6 +24,7 @@ namespace ICSharpCode.SharpDevelop.Services
// 3 = value
Variable variable;
Image image;
public Variable Variable {
get {
@ -42,23 +44,35 @@ namespace ICSharpCode.SharpDevelop.Services @@ -42,23 +44,35 @@ namespace ICSharpCode.SharpDevelop.Services
if (variable == null) throw new ArgumentNullException("variable");
this.variable = variable;
this.variable.ValueChanged += delegate { Update(); };
this[1].Paint += OnIconPaint;
this[2].Text = variable.Name;
this[3].Text = variable.Value.AsString;
this[3].FinishLabelEdit += OnLabelEdited;
if (variable.Value is PrimitiveValue && variable.Value.ManagedType != typeof(string)) {
this[3].AllowLabelEdit = true;
}
if (!variable.Value.MayHaveSubVariables)
if (!variable.Value.MayHaveSubVariables) {
this.ShowPlus = false;
}
this.ShowMinusWhileExpanded = true;
Update();
}
void Update()
{
image = DebuggerIcons.GetImage(variable);
this[1].Text = ""; // Icon
this[2].Text = variable.Name;
this[3].Text = variable.Value.AsString;
}
void OnIconPaint(object sender, ItemPaintEventArgs e)
{
e.Graphics.DrawImageUnscaled(DebuggerIcons.GetImage(variable), e.ClipRectangle);
if (image != null) {
e.Graphics.DrawImageUnscaled(image, e.ClipRectangle);
}
}
void OnLabelEdited(object sender, DynamicListEventArgs e)
@ -71,5 +85,19 @@ namespace ICSharpCode.SharpDevelop.Services @@ -71,5 +85,19 @@ namespace ICSharpCode.SharpDevelop.Services
MessageBox.Show(WorkbenchSingleton.MainForm, "Can not covert " + newValue + " to " + val.ManagedType.ToString(), "Can not set value");
}
}
/// <summary>
/// Called when plus is pressed in debugger tooltip.
/// Sets the data to be show in the next level.
/// </summary>
protected override void OnExpanding(DynamicListEventArgs e)
{
this.ChildRows.Clear();
foreach(Variable variable in this.Variable.SubVariables) {
DynamicTreeDebuggerRow newRow = new DynamicTreeDebuggerRow(variable);
DebuggerGridControl.AddColumns(newRow.ChildColumns);
this.ChildRows.Add(newRow);
}
}
}
}

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

@ -238,27 +238,10 @@ namespace ICSharpCode.SharpDevelop.Services @@ -238,27 +238,10 @@ namespace ICSharpCode.SharpDevelop.Services
return null;
} else {
DynamicTreeDebuggerRow newRow = new DynamicTreeDebuggerRow(variable);
newRow.Expanding += TooltipControlRowExpanding;
return new DebuggerGridControl(newRow);
}
}
/// <summary>
/// Called when plus is pressed in debugger tooltip.
/// Sets the data to be show in the next level.
/// </summary>
void TooltipControlRowExpanding(object sender, EventArgs args)
{
DynamicTreeDebuggerRow row = (DynamicTreeDebuggerRow) sender;
row.ChildRows.Clear();
foreach(Variable variable in row.Variable.SubVariables) {
DynamicTreeDebuggerRow newRow = new DynamicTreeDebuggerRow(variable);
DebuggerGridControl.AddColumns(newRow.ChildColumns);
newRow.Expanding += TooltipControlRowExpanding;
row.ChildRows.Add(newRow);
}
}
public bool CanSetInstructionPointer(string filename, int line, int column)
{
if (debugger != null && debugger.IsPaused && debugger.CurrentFunction != null) {
@ -298,12 +281,13 @@ namespace ICSharpCode.SharpDevelop.Services @@ -298,12 +281,13 @@ namespace ICSharpCode.SharpDevelop.Services
debugger = new NDebugger();
debugger.LogMessage += new EventHandler<MessageEventArgs>(LogMessage);
debugger.DebuggerTraceMessage += new EventHandler<MessageEventArgs>(TraceMessage);
debugger.ProcessStarted += new EventHandler<ProcessEventArgs>(ProcessStarted);
debugger.ProcessExited += new EventHandler<ProcessEventArgs>(ProcessExited);
debugger.DebuggingPaused += new EventHandler<DebuggingPausedEventArgs>(DebuggingPaused);
debugger.DebuggingResumed += new EventHandler<DebuggerEventArgs>(DebuggingResumed);
debugger.LogMessage += LogMessage;
debugger.DebuggerTraceMessage += TraceMessage;
debugger.ProcessStarted += ProcessStarted;
debugger.ProcessExited += ProcessExited;
debugger.DebuggingPaused += DebuggingPaused;
debugger.DebuggeeStateChanged += DebuggeeStateChanged;
debugger.DebuggingResumed += DebuggingResumed;
debugger.BreakpointStateChanged += delegate (object sender, BreakpointEventArgs e) {
RestoreSharpdevelopBreakpoint(e.Breakpoint);
@ -393,12 +377,12 @@ namespace ICSharpCode.SharpDevelop.Services @@ -393,12 +377,12 @@ namespace ICSharpCode.SharpDevelop.Services
isProcessRunningCache = false;
}
}
void DebuggingPaused(object sender, DebuggingPausedEventArgs e)
{
isProcessRunningCache = false;
OnIsProcessRunningChanged(EventArgs.Empty);
if (e.Reason == PausedReason.Exception) {
exceptionHistory.Add(debugger.CurrentThread.CurrentException);
OnExceptionHistoryModified();
@ -409,7 +393,7 @@ namespace ICSharpCode.SharpDevelop.Services @@ -409,7 +393,7 @@ namespace ICSharpCode.SharpDevelop.Services
}
JumpToCurrentLine();
switch (ExceptionForm.Show(debugger.CurrentThread.CurrentException)) {
case ExceptionForm.Result.Break:
break;
@ -420,11 +404,14 @@ namespace ICSharpCode.SharpDevelop.Services @@ -420,11 +404,14 @@ namespace ICSharpCode.SharpDevelop.Services
debugger.CurrentThread.InterceptCurrentException();
break;
}
} else {
JumpToCurrentLine();
}
}
void DebuggeeStateChanged(object sender, DebuggerEventArgs e)
{
JumpToCurrentLine();
}
void DebuggingResumed(object sender, DebuggerEventArgs e)
{
isProcessRunningCache = true;

44
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger-StateControl.cs

@ -28,8 +28,9 @@ namespace Debugger @@ -28,8 +28,9 @@ namespace Debugger
Process currentProcess;
public event EventHandler<DebuggingPausedEventArgs> DebuggingPaused;
public event EventHandler<DebuggerEventArgs> DebuggingResumed;
public event EventHandler<DebuggingPausedEventArgs> DebuggingPaused;
public event EventHandler<DebuggerEventArgs> DebuggeeStateChanged;
public bool PauseOnHandledException {
get {
@ -39,24 +40,32 @@ namespace Debugger @@ -39,24 +40,32 @@ namespace Debugger
pauseOnHandledException = value;
}
}
protected virtual void OnDebuggingPaused(PausedReason reason)
protected virtual void OnDebuggingResumed()
{
TraceMessage ("Debugger event: OnDebuggingPaused(" + reason.ToString() + ")");
TraceMessage ("Debugger event: OnDebuggingResumed()");
if (DebuggingResumed != null) {
DebuggingResumed(this, new DebuggerEventArgs(this));
}
}
protected virtual void OnDebuggingPaused()
{
TraceMessage ("Debugger event: OnDebuggingPaused (" + PausedReason.ToString() + ")");
if (DebuggingPaused != null) {
DebuggingPausedEventArgs args = new DebuggingPausedEventArgs(this, reason);
DebuggingPausedEventArgs args = new DebuggingPausedEventArgs(this, PausedReason);
DebuggingPaused(this, args);
if (args.ResumeDebugging) {
Continue();
}
}
}
protected virtual void OnDebuggingResumed()
protected virtual void OnDebuggeeStateChanged()
{
TraceMessage ("Debugger event: OnDebuggingResumed()");
if (DebuggingResumed != null) {
DebuggingResumed(this, new DebuggerEventArgs(this));
TraceMessage ("Debugger event: OnDebuggeeStateChanged (" + PausedReason.ToString() + ")");
if (DebuggeeStateChanged != null) {
DebuggeeStateChanged(this, new DebuggerEventArgs(this));
}
}
@ -167,16 +176,19 @@ namespace Debugger @@ -167,16 +176,19 @@ namespace Debugger
pausedReason = reason;
sessionID = new object();
if (reason != PausedReason.AllEvalsComplete) {
debugeeStateID = new object();
}
OnDebuggingPaused(reason);
OnDebuggingPaused();
// Debugger state is unknown after calling OnDebuggingPaused (it may be resumed)
if (IsPaused) {
if (reason != PausedReason.AllEvalsComplete) {
debugeeStateID = new object();
OnDebuggeeStateChanged();
}
}
// This is a good point to autmaticaly evaluate evals from update of variables (if there are any)
if (IsPaused) {
localVariables.Update();
this.StartEvaluation();
}

9
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Modules/Module.cs

@ -19,6 +19,7 @@ namespace Debugger @@ -19,6 +19,7 @@ namespace Debugger
{
NDebugger debugger;
bool unloaded = false;
string fullPath;
string fullPathPDB;
ulong baseAdress;
@ -42,6 +43,12 @@ namespace Debugger @@ -42,6 +43,12 @@ namespace Debugger
}
}
public bool Unloaded {
get {
return unloaded;
}
}
public SymReader SymReader {
get {
return symReader;
@ -209,6 +216,8 @@ namespace Debugger @@ -209,6 +216,8 @@ namespace Debugger
} finally {
metaDataInterface = null;
}
unloaded = true;
}
}
}

4
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs

@ -76,7 +76,7 @@ namespace Debugger @@ -76,7 +76,7 @@ namespace Debugger
/// </summary>
public bool HasExpired {
get {
return steppedOut;
return steppedOut || Module.Unloaded;
}
}
@ -492,7 +492,7 @@ namespace Debugger @@ -492,7 +492,7 @@ namespace Debugger
yield return new PropertyVariable(debugger,
method.Name.Remove(0, 4),
delegate {
if (this.HasExpired && !this.IsStatic) {
if (this.HasExpired) {
return null;
} else {
return CreatePropertyEval(method);

20
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Variable.cs

@ -26,9 +26,23 @@ namespace Debugger @@ -26,9 +26,23 @@ namespace Debugger
protected ValueGetter valueGetter;
Value cachedValue;
public event EventHandler<VariableEventArgs> ValueChanged;
event EventHandler<DebuggerEventArgs> valueChanged;
public event EventHandler<VariableCollectionEventArgs> ValueRemovedFromCollection;
public event EventHandler<DebuggerEventArgs> ValueChanged {
add {
valueChanged += value;
debugger.DebuggeeStateChanged += value;
debugger.ProcessExited += delegate {
debugger.DebuggeeStateChanged -= value;
};
}
remove {
valueChanged -= value;
debugger.DebuggeeStateChanged -= value;
}
}
public NDebugger Debugger {
get {
return debugger;
@ -78,8 +92,8 @@ namespace Debugger @@ -78,8 +92,8 @@ namespace Debugger
protected virtual void OnValueChanged()
{
cachedValue = null;
if (ValueChanged != null) {
ValueChanged(this, new VariableEventArgs(this));
if (valueChanged != null) {
valueChanged(this, new VariableEventArgs(this));
}
}

Loading…
Cancel
Save