Skip to content
This repository was archived by the owner on Oct 4, 2021. It is now read-only.

Commit cb68f03

Browse files
authored
Merge pull request #8889 from mono/jstedfast-debugger-save-expression-state
[Debugger] Fixed the saving/restoring of watch expressions between se…
2 parents 4adbbb6 + 433d790 commit cb68f03

File tree

2 files changed

+30
-19
lines changed

2 files changed

+30
-19
lines changed

main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValuePad.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,16 @@ public class ObjectValuePad : PadContent
5050
StackFrame lastFrame;
5151
bool needsUpdateValues;
5252
bool needsUpdateFrame;
53-
bool initialResume;
5453
bool disposed;
5554

5655
public override Control Control {
5756
get { return control; }
5857
}
5958

59+
protected bool IsInitialResume {
60+
get; private set;
61+
}
62+
6063
public ObjectValuePad (bool allowWatchExpressions = false)
6164
{
6265
if (UseNewTreeView) {
@@ -140,7 +143,7 @@ public ObjectValuePad (bool allowWatchExpressions = false)
140143
needsUpdateFrame = true;
141144

142145
//If pad is created/opened while debugging...
143-
initialResume = !DebuggingService.IsDebugging;
146+
IsInitialResume = !DebuggingService.IsDebugging;
144147
}
145148

146149
public override void Dispose ()
@@ -222,20 +225,20 @@ protected virtual void OnDebuggerPaused (object s, EventArgs a)
222225
protected virtual void OnDebuggerResumed (object s, EventArgs a)
223226
{
224227
if (UseNewTreeView) {
225-
if (!initialResume) {
228+
if (!IsInitialResume) {
226229
controller.ChangeCheckpoint ();
227230
}
228231

229232
controller.ClearValues ();
230233
} else {
231-
if (!initialResume) {
234+
if (!IsInitialResume) {
232235
tree.ChangeCheckpoint ();
233236
}
234237

235238
tree.ClearValues ();
236239
}
237240

238-
initialResume = false;
241+
IsInitialResume = false;
239242
}
240243

241244
protected virtual void OnDebuggerStopped (object s, EventArgs a)
@@ -252,7 +255,7 @@ protected virtual void OnDebuggerStopped (object s, EventArgs a)
252255
}
253256

254257
lastFrame = null;
255-
initialResume = true;
258+
IsInitialResume = true;
256259
}
257260

258261
protected virtual void OnEvaluationOptionsChanged (object s, EventArgs a)

main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/WatchPad.cs

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,14 @@ public void AddWatch (string expression)
8080
}
8181
}
8282

83-
void ReloadValues ()
83+
void SaveExpressions ()
8484
{
85-
// clone the list of expressions
8685
expressions.Clear ();
8786
expressions.AddRange (controller.GetExpressions ());
87+
}
8888

89+
void RestoreExpressions ()
90+
{
8991
// remove the expressions because we're going to rebuild them
9092
controller.ClearAll ();
9193

@@ -98,15 +100,15 @@ public override void OnUpdateFrame ()
98100
base.OnUpdateFrame ();
99101

100102
if (UseNewTreeView)
101-
ReloadValues ();
103+
RestoreExpressions ();
102104
}
103105

104106
public override void OnUpdateValues ()
105107
{
106108
base.OnUpdateValues ();
107109

108110
if (UseNewTreeView) {
109-
ReloadValues ();
111+
RestoreExpressions ();
110112
} else {
111113
tree.Update ();
112114
}
@@ -116,14 +118,22 @@ protected override void OnDebuggerResumed (object s, EventArgs a)
116118
{
117119
// base will clear the controller, which removes all values and expressions
118120

119-
if (UseNewTreeView) {
120-
expressions.Clear ();
121-
expressions.AddRange (controller.GetExpressions ());
122-
}
121+
if (UseNewTreeView && !IsInitialResume)
122+
SaveExpressions ();
123123

124124
base.OnDebuggerResumed (s, a);
125125
}
126126

127+
protected override void OnDebuggerStopped (object s, EventArgs a)
128+
{
129+
// base will clear the controller, which removes all values and expressions
130+
131+
if (UseNewTreeView)
132+
SaveExpressions ();
133+
134+
base.OnDebuggerStopped (s, a);
135+
}
136+
127137
#region IMementoCapable implementation
128138

129139
public ICustomXmlSerializer Memento {
@@ -132,10 +142,8 @@ public ICustomXmlSerializer Memento {
132142
}
133143
set {
134144
if (UseNewTreeView) {
135-
if (controller != null) {
136-
controller.ClearAll ();
137-
controller.AddExpressions (expressions);
138-
}
145+
if (controller != null)
146+
RestoreExpressions ();
139147
} else {
140148
if (tree != null) {
141149
tree.ClearExpressions ();
@@ -150,7 +158,7 @@ void ICustomXmlSerializer.WriteTo (XmlWriter writer)
150158
if (UseNewTreeView) {
151159
if (controller != null) {
152160
writer.WriteStartElement ("Values");
153-
foreach (var expression in controller.GetExpressions())
161+
foreach (var expression in expressions)
154162
writer.WriteElementString ("Value", expression);
155163
writer.WriteEndElement ();
156164
}

0 commit comments

Comments
 (0)