44
55namespace 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}
0 commit comments