Skip to content

Commit 89a7f01

Browse files
committed
Encapsulate EnvDTE.Expression related code in Debugger class
1 parent d15d4ae commit 89a7f01

File tree

2 files changed

+38
-154
lines changed

2 files changed

+38
-154
lines changed

solution/GraphicalDebugging/Debugger.cs

Lines changed: 35 additions & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,30 @@
44

55
namespace GraphicalDebugging
66
{
7+
public class Expression
8+
{
9+
public string Name;
10+
public string Type;
11+
public bool IsValid;
12+
}
13+
714
class Debugger
815
{
916
public Debugger(DTE dte)
1017
{
11-
this.debugger = new DebuggerWrapper(dte);
18+
this.debugger = dte.Debugger;
1219
}
1320

1421
public int LoadSize(string name)
1522
{
16-
Expression expr = debugger.GetExpression(name);
23+
var expr = debugger.GetExpression(name);
1724
return expr.IsValidValue
1825
? Math.Max(Util.ParseInt(expr.Value, debugger.HexDisplayMode), 0)
1926
: 0;
2027
}
2128
public int LoadInt(string name, int defaultValue = 0)
2229
{
23-
Expression expr = debugger.GetExpression(name);
30+
var expr = debugger.GetExpression(name);
2431
return expr.IsValidValue
2532
? Util.ParseInt(expr.Value, debugger.HexDisplayMode)
2633
: defaultValue;
@@ -29,7 +36,7 @@ public int LoadInt(string name, int defaultValue = 0)
2936
public bool TryLoadInt(string name, out int result)
3037
{
3138
result = 0;
32-
Expression expr = debugger.GetExpression(name);
39+
var expr = debugger.GetExpression(name);
3340
if (!expr.IsValidValue)
3441
return false;
3542
result = Util.ParseInt(expr.Value, debugger.HexDisplayMode);
@@ -42,7 +49,7 @@ public bool TryLoadDouble(string name, out double result)
4249
string castedName = "(double)" + name;
4350
if (IsLanguageBasic)
4451
castedName = "CType(" + name + ", Double)";
45-
Expression expr = debugger.GetExpression(castedName);
52+
var expr = debugger.GetExpression(castedName);
4653
if (!expr.IsValidValue)
4754
return false;
4855
result = Util.ParseDouble(expr.Value);
@@ -52,7 +59,7 @@ public bool TryLoadDouble(string name, out double result)
5259
public bool TryLoadBool(string name, out bool result)
5360
{
5461
result = false;
55-
Expression expr = debugger.GetExpression("(" + name + ") == true)");
62+
var expr = debugger.GetExpression("(" + name + ") == true)");
5663
if (!expr.IsValidValue)
5764
return false;
5865
result = (expr.Value == "true" || expr.Value == "1");
@@ -117,7 +124,7 @@ public static bool IsInvalidAddressDifference(long diff)
117124

118125
public ulong GetPointer(string pointerName)
119126
{
120-
Expression ptrExpr = debugger.GetExpression("(void*)(" + pointerName + ")");
127+
var ptrExpr = debugger.GetExpression("(void*)(" + pointerName + ")");
121128
if (!ptrExpr.IsValidValue)
122129
return 0;
123130
string addr = ptrExpr.Value;
@@ -142,7 +149,7 @@ public int GetValueSizeof(string valName)
142149
//if (!IsLanguageCpp(debugger))
143150
if (IsLanguageCs) // Change this when getting address in Basic works
144151
{
145-
Expression valExpr = debugger.GetExpression(valName);
152+
var valExpr = debugger.GetExpression(valName);
146153
if (!valExpr.IsValidValue)
147154
return 0;
148155
typeName = valExpr.Type;
@@ -158,7 +165,7 @@ public int GetTypeSizeof(string valType)
158165
return 0;
159166

160167
string sizeOfStr = "sizeof(" + valType + ")";
161-
Expression valSizeExpr = debugger.GetExpression(sizeOfStr);
168+
var valSizeExpr = debugger.GetExpression(sizeOfStr);
162169
return valSizeExpr.IsValidValue
163170
? Util.ParseInt(valSizeExpr.Value, debugger.HexDisplayMode)
164171
: 0;
@@ -167,7 +174,7 @@ public int GetTypeSizeof(string valType)
167174
public int GetCppSizeof(string valNameOrType)
168175
{
169176
string sizeOfStr = "sizeof(" + valNameOrType + ")";
170-
Expression valSizeExpr = debugger.GetExpression(sizeOfStr);
177+
var valSizeExpr = debugger.GetExpression(sizeOfStr);
171178
return valSizeExpr.IsValidValue
172179
? Util.ParseInt(valSizeExpr.Value, debugger.HexDisplayMode)
173180
: 0;
@@ -176,24 +183,35 @@ public int GetCppSizeof(string valNameOrType)
176183
// Valid type name or null
177184
public string GetValueType(string valName)
178185
{
179-
Expression valExpr = debugger.GetExpression(valName);
180-
return valExpr.IsValidValue
181-
? valExpr.Type
182-
: null;
186+
var valExpr = debugger.GetExpression(valName);
187+
if (!valExpr.IsValidValue)
188+
return null;
189+
if (IsLanguageCpp)
190+
return Util.CppNormalizeType(valExpr.Type);
191+
else
192+
return valExpr.Type;
183193
}
184194

185195
// Valid value or null
186196
public string GetValue(string valName)
187197
{
188-
Expression valExpr = debugger.GetExpression(valName);
198+
var valExpr = debugger.GetExpression(valName);
189199
return valExpr.IsValidValue
190200
? valExpr.Value
191201
: null;
192202
}
193203

194204
public Expression GetExpression(string valName)
195205
{
196-
return debugger.GetExpression(valName);
206+
var expr = debugger.GetExpression(valName);
207+
Expression result = new Expression();
208+
result.IsValid = expr.IsValidValue;
209+
result.Name = expr.Name;
210+
if (IsLanguageCpp)
211+
result.Type = Util.CppNormalizeType(expr.Type);
212+
else
213+
result.Type = expr.Type;
214+
return result;
197215
}
198216

199217
public bool ValueExists(string valName)
@@ -259,140 +277,6 @@ public bool IsLanguageBasic
259277
get { return debugger.CurrentStackFrame.Language == "Basic"; }
260278
}
261279

262-
DebuggerWrapper debugger;
263-
}
264-
265-
class DebuggerWrapper : EnvDTE.Debugger
266-
{
267-
public DebuggerWrapper(DTE dte)
268-
{
269-
this.debugger = dte.Debugger;
270-
}
271-
public Expression GetExpression(string ExpressionText, bool UseAutoExpandRules = false, int Timeout = -1)
272-
{
273-
Expression expr = debugger.GetExpression(ExpressionText, UseAutoExpandRules, Timeout);
274-
return CurrentStackFrame.Language == "C++" ? new CppExpression(expr) : expr;
275-
}
276-
277-
public void DetachAll()
278-
{
279-
debugger.DetachAll();
280-
}
281-
282-
public void StepInto(bool WaitForBreakOrEnd = true)
283-
{
284-
debugger.StepInto(WaitForBreakOrEnd);
285-
}
286-
287-
public void StepOver(bool WaitForBreakOrEnd = true)
288-
{
289-
debugger.StepOver(WaitForBreakOrEnd);
290-
}
291-
292-
public void StepOut(bool WaitForBreakOrEnd = true)
293-
{
294-
debugger.StepOut(WaitForBreakOrEnd);
295-
}
296-
297-
public void Go(bool WaitForBreakOrEnd = true)
298-
{
299-
debugger.Go(WaitForBreakOrEnd);
300-
}
301-
302-
public void Break(bool WaitForBreakMode = true)
303-
{
304-
debugger.Break(WaitForBreakMode);
305-
}
306-
307-
public void Stop(bool WaitForDesignMode = true)
308-
{
309-
debugger.Stop(WaitForDesignMode);
310-
}
311-
312-
public void SetNextStatement()
313-
{
314-
debugger.SetNextStatement();
315-
}
316-
317-
public void RunToCursor(bool WaitForBreakOrEnd = true)
318-
{
319-
debugger.RunToCursor(WaitForBreakOrEnd);
320-
}
321-
322-
public void ExecuteStatement(string Statement, int Timeout = -1, bool TreatAsExpression = false)
323-
{
324-
debugger.ExecuteStatement(Statement, Timeout, TreatAsExpression);
325-
}
326-
327-
public void TerminateAll()
328-
{
329-
debugger.TerminateAll();
330-
}
331-
332-
public Breakpoints Breakpoints => debugger.Breakpoints;
333-
334-
public Languages Languages => debugger.Languages;
335-
336-
public dbgDebugMode CurrentMode => debugger.CurrentMode;
337-
338-
public Process CurrentProcess { get => debugger.CurrentProcess; set => debugger.CurrentProcess = value; }
339-
public Program CurrentProgram { get => debugger.CurrentProgram; set => debugger.CurrentProgram = value; }
340-
public Thread CurrentThread { get => debugger.CurrentThread; set => debugger.CurrentThread = value; }
341-
public StackFrame CurrentStackFrame { get => debugger.CurrentStackFrame; set => debugger.CurrentStackFrame = value; }
342-
public bool HexDisplayMode { get => debugger.HexDisplayMode; set => debugger.HexDisplayMode = value; }
343-
public bool HexInputMode { get => debugger.HexInputMode; set => debugger.HexInputMode = value; }
344-
345-
public dbgEventReason LastBreakReason => debugger.LastBreakReason;
346-
347-
public Breakpoint BreakpointLastHit => debugger.BreakpointLastHit;
348-
349-
public Breakpoints AllBreakpointsLastHit => debugger.AllBreakpointsLastHit;
350-
351-
public Processes DebuggedProcesses => debugger.DebuggedProcesses;
352-
353-
public Processes LocalProcesses => debugger.LocalProcesses;
354-
355-
public DTE DTE => debugger.DTE;
356-
357-
public DTE Parent => debugger.Parent;
358-
359-
private EnvDTE.Debugger debugger;
360-
}
361-
362-
public class CppExpression : EnvDTE.Expression
363-
{
364-
public CppExpression(Expression expression)
365-
{
366-
this.expression = expression;
367-
}
368-
369-
public string Name => expression.Name;
370-
371-
public string Type
372-
{
373-
get
374-
{
375-
if (string.IsNullOrEmpty(this.normalizedType))
376-
{
377-
this.normalizedType = Util.CppNormalizeType(expression.Type);
378-
}
379-
return this.normalizedType;
380-
}
381-
}
382-
383-
public Expressions DataMembers => expression.DataMembers;
384-
385-
public string Value { get => expression.Value; set => expression.Value = value; }
386-
387-
public bool IsValidValue => expression.IsValidValue;
388-
389-
public DTE DTE => expression.DTE;
390-
391-
public EnvDTE.Debugger Parent => expression.Parent;
392-
393-
public Expressions Collection => expression.Collection;
394-
395-
private Expression expression;
396-
private string normalizedType;
280+
EnvDTE.Debugger debugger;
397281
}
398282
}

solution/GraphicalDebugging/ExpressionLoader.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ private ExpressionLoader(DTE2 dte)
159159
public static Expression[] GetExpressions(string name, char separator = ';')
160160
{
161161
var expr = Debugger.GetExpression(name);
162-
if (expr.IsValidValue)
162+
if (expr.IsValid)
163163
return new Expression[] { expr };
164164

165165
string[] subnames = name.Split(separator);
@@ -175,7 +175,7 @@ private ExpressionLoader(DTE2 dte)
175175
public static bool AllValidValues(Expression[] exprs)
176176
{
177177
foreach(Expression e in exprs)
178-
if (!e.IsValidValue)
178+
if (!e.IsValid)
179179
return false;
180180
return true;
181181
}
@@ -2253,7 +2253,7 @@ static ContainerLoader ElementsLoader(Loaders loaders, Debugger debugger,
22532253
containerType = "";
22542254

22552255
Expression expr = debugger.GetExpression(elementsName);
2256-
if (!expr.IsValidValue)
2256+
if (!expr.IsValid)
22572257
return null;
22582258

22592259
elementsName = expr.Name;

0 commit comments

Comments
 (0)