public void Error() { var source = @"using System.Diagnostics; [DebuggerDisplay(""Value"", Name=""Name"", Type=""Type"")] class A { } class B { bool f; internal A P { get { return new A(); } } internal A Q { get { while(f) { } return new A(); } } } "; DkmClrRuntimeInstance runtime = null; GetMemberValueDelegate getMemberValue = (v, m) => (m == "Q") ? CreateErrorValue(runtime.GetType("A"), "Function evaluation timed out") : null; runtime = new DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlibAndSystemCore(GetAssembly(source)), getMemberValue: getMemberValue); using (runtime.Load()) { var type = runtime.GetType("B"); var value = CreateDkmClrValue(type.Instantiate(), type: type); var evalResult = FormatResult("o", value); var children = GetChildren(evalResult); Verify(children, EvalResult("Name", "Value", "Type", "o.P", DkmEvaluationResultFlags.ReadOnly), EvalFailedResult("Q", "Function evaluation timed out", "A", "o.Q"), EvalResult("f", "false", "bool", "o.f", DkmEvaluationResultFlags.Boolean)); } }
public void Member() { var source = @"unsafe class C { internal C(long p) { this.pfn = (int*)p; } int* pfn; }"; var assembly = GetUnsafeAssembly(source); const long ptr = 0x0; GetMemberValueDelegate getMemberValue = (v, m) => (m == "pfn") ? GetFunctionPointerField(v, m) : null; var runtime = new DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlibAndSystemCore(assembly), getMemberValue: getMemberValue); using (runtime.Load()) { var type = runtime.GetType("C"); var value = CreateDkmClrValue(type.Instantiate(ptr), type); var evalResult = FormatResult("o", value); Verify(evalResult, EvalResult("o", "{C}", "C", "o", DkmEvaluationResultFlags.Expandable, DkmEvaluationResultCategory.Other)); var children = GetChildren(evalResult); Verify(children, EvalResult("pfn", PointerToString(new IntPtr(ptr)), "int*", "o.pfn", DkmEvaluationResultFlags.None, DkmEvaluationResultCategory.Other)); } }
internal DkmClrRuntimeInstance( Assembly[] assemblies, GetModuleDelegate getModule = null, GetMemberValueDelegate getMemberValue = null, bool enableNativeDebugging = false ) : base(enableNativeDebugging) { if (getModule == null) { getModule = (r, a) => new DkmClrModuleInstance( r, a, (a != null) ? new DkmModule(a.GetName().Name + ".dll") : null ); } this.Assemblies = assemblies; this.Modules = assemblies .Select(a => getModule(this, a)) .Where(m => m != null) .ToArray(); _defaultModule = getModule(this, null); _appDomain = new DkmClrAppDomain(this); this.GetMemberValue = getMemberValue; }
public void ResultsView_Error() { var source = @"using System.Collections; class C { bool f; internal ArrayList P { get { while (!this.f) { } return new ArrayList(); } } internal int Q { get { while (!this.f) { } return 3; } } }"; DkmClrRuntimeInstance runtime = null; GetMemberValueDelegate getMemberValue = (v, m) => { switch (m) { case "P": return(CreateErrorValue(runtime.GetType(typeof(System.Collections.ArrayList)), "Property 'P' evaluation timed out")); case "Q": return(CreateErrorValue(runtime.GetType(typeof(string)), "Property 'Q' evaluation timed out")); default: return(null); } }; runtime = new DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlibAndSystemCore(GetAssembly(source)), getMemberValue: getMemberValue); using (runtime.Load()) { var type = runtime.GetType("C"); var value = CreateDkmClrValue(type.Instantiate(), type: type); var memberValue = value.GetMemberValue("P", (int)System.Reflection.MemberTypes.Property, "C"). WithInspectionContext(CreateDkmInspectionContext(DkmEvaluationFlags.ResultsOnly)); var evalResult = FormatResult("o.P", "o.P, results", memberValue); Verify(evalResult, EvalFailedResult("o.P", "Property 'P' evaluation timed out")); memberValue = value.GetMemberValue("Q", (int)System.Reflection.MemberTypes.Property, "C"). WithInspectionContext(CreateDkmInspectionContext(DkmEvaluationFlags.ResultsOnly)); evalResult = FormatResult("o.Q", "o.Q, results", memberValue); Verify(evalResult, EvalFailedResult("o.Q", "Property 'Q' evaluation timed out")); } }
internal DkmClrRuntimeInstance( Assembly[] assemblies, GetModuleDelegate getModule = null, GetMemberValueDelegate getMemberValue = null) { if (getModule == null) { getModule = (r, a) => new DkmClrModuleInstance(r, a, (a != null) ? new DkmModule(a.GetName().Name + ".dll") : null); } this.Assemblies = assemblies; this.Modules = assemblies.Select(a => getModule(this, a)).Where(m => m != null).ToArray(); _defaultModule = getModule(this, null); _appDomain = new DkmClrAppDomain(this); _getMemberValue = getMemberValue; }