diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs
index e1bcf8b2ab..957ecec786 100644
--- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs
@@ -32,7 +32,6 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
{
WindowsDebugger debuggerService;
GridViewColumnHider columnHider;
- //SelectedProperties selectedProperties;
/// Number of items shown initially when visualizing IEnumerable.
static readonly int initialIEnumerableItemsCount = 24;
diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/DebuggerHelpers.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/DebuggerHelpers.cs
index 9b8b4831cb..bda33693dd 100644
--- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/DebuggerHelpers.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/DebuggerHelpers.cs
@@ -59,7 +59,7 @@ namespace Debugger.AddIn.Visualizers.Utils
/// Hash code of the object in the debugee.
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
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() ?
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Eval.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Eval.cs
index 2edf0a0dc2..2a2c7d09aa 100644
--- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Eval.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Eval.cs
@@ -336,6 +336,11 @@ namespace Debugger
#region Convenience methods
+ public static Value NewObject(DebugType debugType, List constructorArguments)
+ {
+ return AsyncNewObject(debugType, constructorArguments).WaitForResult();
+ }
+
public static Value NewObjectNoConstructor(DebugType debugType)
{
return AsyncNewObjectNoConstructor(debugType).WaitForResult();
@@ -343,6 +348,23 @@ namespace Debugger
#endregion
+ public static Eval AsyncNewObject(DebugType debugType, List constructorArguments)
+ {
+ List 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().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
}
);
}
+
+ static ICorDebugValue[] ValuesAsCorDebug(List values)
+ {
+ ICorDebugValue[] valuesAsCorDebug = new ICorDebugValue[values.Count];
+ for(int i = 0; i < values.Count; i++)
+ {
+ valuesAsCorDebug[i] = values[i].CorValue;
+ }
+ return valuesAsCorDebug;
+ }
+
+ static List SelectExpressions(List values)
+ {
+ List expressions = new List(values.Count);
+ foreach (Value value in values) {
+ expressions.Add(value.ExpressionTree);
+ }
+ return expressions;
+ }
}
}