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));
            }
        }
Ejemplo n.º 2
0
        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));
            }
        }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
        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"));
            }
        }
Ejemplo n.º 5
0
 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;
 }