Browse Source

Fixed "Process is not paused" exception in DebuggerHelpers.InvokeDefaultGetHashCode - thanks to David.

Started implementing Eval.NewObject.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4788 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Martin Koníček 17 years ago
parent
commit
793d82a9df
  1. 1
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs
  2. 3
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/DebuggerHelpers.cs
  3. 41
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Eval.cs

1
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs

@ -32,7 +32,6 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -32,7 +32,6 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
{
WindowsDebugger debuggerService;
GridViewColumnHider columnHider;
//SelectedProperties selectedProperties;
/// <summary> Number of items shown initially when visualizing IEnumerable. </summary>
static readonly int initialIEnumerableItemsCount = 24;

3
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/DebuggerHelpers.cs

@ -59,7 +59,7 @@ namespace Debugger.AddIn.Visualizers.Utils @@ -59,7 +59,7 @@ namespace Debugger.AddIn.Visualizers.Utils
/// <returns>Hash code of the object in the debugee.</returns>
public static int InvokeDefaultGetHashCode(this Value value)
{
if (DebuggerHelpers.hashCodeMethod == null)
if (DebuggerHelpers.hashCodeMethod == null || DebuggerHelpers.hashCodeMethod.Process.HasExited)
{
DebugType typeRuntimeHelpers = DebugType.CreateFromType(value.AppDomain, typeof(System.Runtime.CompilerServices.RuntimeHelpers));
DebuggerHelpers.hashCodeMethod = typeRuntimeHelpers.GetMember("GetHashCode", BindingFlags.Public | BindingFlags.Static | BindingFlags.Method | BindingFlags.IncludeSuperType) as MethodInfo;
@ -68,7 +68,6 @@ namespace Debugger.AddIn.Visualizers.Utils @@ -68,7 +68,6 @@ namespace Debugger.AddIn.Visualizers.Utils
throw new DebuggerException("Cannot obtain method System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode");
}
}
// David: I had hard time finding out how to invoke static method.
// value.InvokeMethod is nice for instance methods.
// what about MethodInfo.Invoke() ?

41
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Eval.cs

@ -336,6 +336,11 @@ namespace Debugger @@ -336,6 +336,11 @@ namespace Debugger
#region Convenience methods
public static Value NewObject(DebugType debugType, List<Value> constructorArguments)
{
return AsyncNewObject(debugType, constructorArguments).WaitForResult();
}
public static Value NewObjectNoConstructor(DebugType debugType)
{
return AsyncNewObjectNoConstructor(debugType).WaitForResult();
@ -343,6 +348,23 @@ namespace Debugger @@ -343,6 +348,23 @@ namespace Debugger
#endregion
public static Eval AsyncNewObject(DebugType debugType, List<Value> constructorArguments)
{
List<Expression> constructorArgumentsExpressions = SelectExpressions(constructorArguments);
ICorDebugValue[] constructorArgsCorDebug = ValuesAsCorDebug(constructorArguments);
MethodInfo constructor = debugType.GetMethod(".ctor");
return new Eval(
debugType.AppDomain,
"New object: " + debugType.FullName,
new ObjectCreateExpression(new TypeReference(debugType.FullName), constructorArgumentsExpressions),
delegate(Eval eval) {
eval.CorEval.CastTo<ICorDebugEval2>().NewParameterizedObject(
constructor.CorFunction, (uint)debugType.GenericArguments.Count, debugType.GenericArgumentsAsCorDebugType,
(uint)constructorArgsCorDebug.Length, constructorArgsCorDebug);
}
);
}
public static Eval AsyncNewObjectNoConstructor(DebugType debugType)
{
return new Eval(
@ -354,5 +376,24 @@ namespace Debugger @@ -354,5 +376,24 @@ namespace Debugger
}
);
}
static ICorDebugValue[] ValuesAsCorDebug(List<Value> values)
{
ICorDebugValue[] valuesAsCorDebug = new ICorDebugValue[values.Count];
for(int i = 0; i < values.Count; i++)
{
valuesAsCorDebug[i] = values[i].CorValue;
}
return valuesAsCorDebug;
}
static List<Expression> SelectExpressions(List<Value> values)
{
List<Expression> expressions = new List<Expression>(values.Count);
foreach (Value value in values) {
expressions.Add(value.ExpressionTree);
}
return expressions;
}
}
}

Loading…
Cancel
Save