Browse Source

Events unregistered when debugger tooltip is closed

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@901 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
41607e096f
  1. 16
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/TreeListViewDebuggerItem.cs
  2. 30
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/DynamicTreeDebuggerRow.cs
  3. 5
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs

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

@ -44,12 +44,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{ {
this.variable = variable; this.variable = variable;
variable.ValueChanged += delegate { variable.ValueChanged += Update;
Highlight = (Variable.Value.AsString != SubItems[1].Text);
Update();
};
variable.ValueRemovedFromCollection += delegate { this.Remove(); }; variable.ValueRemovedFromCollection += delegate {
variable.ValueChanged -= Update;
this.Remove();
};
SubItems.Add(""); SubItems.Add("");
SubItems.Add(""); SubItems.Add("");
@ -57,6 +57,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
Update(); Update();
} }
void Update(object sender, DebuggerEventArgs e)
{
Highlight = (Variable.Value.AsString != SubItems[1].Text);
Update();
}
public void Update() public void Update()
{ {
if (this.SubItems[0].Text != Variable.Name) if (this.SubItems[0].Text != Variable.Name)

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

@ -26,6 +26,7 @@ namespace ICSharpCode.SharpDevelop.Services
Variable variable; Variable variable;
Image image; Image image;
bool populated = false;
public Variable Variable { public Variable Variable {
get { get {
@ -45,21 +46,19 @@ namespace ICSharpCode.SharpDevelop.Services
if (variable == null) throw new ArgumentNullException("variable"); if (variable == null) throw new ArgumentNullException("variable");
this.variable = variable; this.variable = variable;
this.variable.ValueChanged += delegate { Update(); }; this.variable.ValueChanged += Update;
this.Hidden += delegate { this.variable.ValueChanged -= Update; };
DebuggerGridControl.AddColumns(this.ChildColumns); DebuggerGridControl.AddColumns(this.ChildColumns);
this[1].Paint += OnIconPaint; this[1].Paint += OnIconPaint;
this[3].FinishLabelEdit += OnLabelEdited; this[3].FinishLabelEdit += OnLabelEdited;
if (variable.Value is PrimitiveValue && variable.Value.ManagedType != typeof(string)) {
this[3].AllowLabelEdit = true;
}
if (!variable.Value.MayHaveSubVariables) { Update();
this.ShowPlus = false;
} }
this.ShowMinusWhileExpanded = true;
void Update(object sender, DebuggerEventArgs e)
{
Update(); Update();
} }
@ -69,6 +68,14 @@ namespace ICSharpCode.SharpDevelop.Services
this[1].Text = ""; // Icon this[1].Text = ""; // Icon
this[2].Text = variable.Name; this[2].Text = variable.Name;
this[3].Text = variable.Value.AsString; this[3].Text = variable.Value.AsString;
if (variable.Value is PrimitiveValue && variable.Value.ManagedType != typeof(string)) {
this[3].AllowLabelEdit = true;
}
if (!variable.Value.MayHaveSubVariables) {
this.ShowPlus = false;
}
this.ShowMinusWhileExpanded = true;
} }
void OnIconPaint(object sender, ItemPaintEventArgs e) void OnIconPaint(object sender, ItemPaintEventArgs e)
@ -94,6 +101,13 @@ namespace ICSharpCode.SharpDevelop.Services
/// Sets the data to be show in the next level. /// Sets the data to be show in the next level.
/// </summary> /// </summary>
protected override void OnExpanding(DynamicListEventArgs e) protected override void OnExpanding(DynamicListEventArgs e)
{
if (!populated) {
Populate();
}
}
void Populate()
{ {
List<Variable> publicStatic = new List<Variable>(); List<Variable> publicStatic = new List<Variable>();
List<Variable> publicInstance = new List<Variable>(); List<Variable> publicInstance = new List<Variable>();
@ -137,6 +151,8 @@ namespace ICSharpCode.SharpDevelop.Services
} }
// Public Members // Public Members
this.ChildRows.AddRange(RowsFromVariables(publicInstance)); this.ChildRows.AddRange(RowsFromVariables(publicInstance));
populated = true;
} }
IEnumerable<DynamicListRow> RowsFromVariables(IEnumerable<Variable> variables) IEnumerable<DynamicListRow> RowsFromVariables(IEnumerable<Variable> variables)

5
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs

@ -239,7 +239,7 @@ namespace Debugger
internal IEnumerable<Function> GetCallstackAt(uint firstChainIndex, uint firstFrameIndex) internal IEnumerable<Function> GetCallstackAt(uint firstChainIndex, uint firstFrameIndex)
{ {
if (process.IsRunning) yield break; // TODO: thow exception process.AssertPaused();
ICorDebugChainEnum corChainEnum; ICorDebugChainEnum corChainEnum;
corThread.EnumerateChains(out corChainEnum); corThread.EnumerateChains(out corChainEnum);
@ -265,6 +265,9 @@ namespace Debugger
chainIndex--; chainIndex--;
CorDebugChainReason reason;
corChains[0].GetReason(out reason);
int isManaged; int isManaged;
corChains[0].IsManaged(out isManaged); corChains[0].IsManaged(out isManaged);
if (isManaged == 0) continue; // Only managed ones if (isManaged == 0) continue; // Only managed ones

Loading…
Cancel
Save