How to implement IDkmCustomVisualizer for managed target

半腔热情 提交于 2019-12-11 15:51:09

问题


So far I was able to run and this sample that implement this interface and using it for debug C++ apps. I try to implement IDkmCustomVisualizer in C#, aiming use it to debug CLR apps. Is this possible ? I retrofitted Hello Wrold sample, where added class that implement IDkmCustomVisualizer and changed HelloWorld.vsdconfigxml. But nothing works, debugger in experimental instance do not use this implementation. Tried with VS 2017 and 2019 Community.

my IDkmCustomVisualizer implementation:

public class CSF : IDkmCustomVisualizer
{
    void crf()
    {
        System.IO.File.Delete("c:/uuu.txt");
        System.IO.File.WriteAllText("c:/uuu.txt", "ooo");
    }

    void IDkmCustomVisualizer.EvaluateVisualizedExpression(DkmVisualizedExpression visualizedExpression, out DkmEvaluationResult resultObject)
    {
        crf();
        visualizedExpression.EvaluateVisualizedExpression(out resultObject);
    }

    void IDkmCustomVisualizer.UseDefaultEvaluationBehavior(DkmVisualizedExpression visualizedExpression, out bool useDefaultEvaluationBehavior, out DkmEvaluationResult defaultEvaluationResult)
    {
        crf();
        visualizedExpression.UseDefaultEvaluationBehavior(out useDefaultEvaluationBehavior, out defaultEvaluationResult);
    }

    void IDkmCustomVisualizer.GetChildren(DkmVisualizedExpression visualizedExpression, int initialRequestSize, DkmInspectionContext inspectionContext, out DkmChildVisualizedExpression[] initialChildren, out DkmEvaluationResultEnumContext enumContext)
    {
        crf();
        visualizedExpression.GetChildren(initialRequestSize, inspectionContext, out initialChildren, out enumContext);
    }

    void IDkmCustomVisualizer.GetItems(DkmVisualizedExpression visualizedExpression, DkmEvaluationResultEnumContext enumContext, int startIndex, int count, out DkmChildVisualizedExpression[] items)
    {
        crf();
        visualizedExpression.GetItems(enumContext, startIndex, count, out items);
    }

    void IDkmCustomVisualizer.SetValueAsString(DkmVisualizedExpression visualizedExpression, string value, int timeout, out string errorText)
    {
        crf();
        visualizedExpression.SetValueAsString(value, timeout, out errorText);
    }

    string IDkmCustomVisualizer.GetUnderlyingString(DkmVisualizedExpression visualizedExpression)
    {
        crf();
        var ret = visualizedExpression.GetUnderlyingString();
        return ret;
    }
}

and HelloWorld.vsdconfigxml

<?xml version="1.0" encoding="utf-8"?>

<Configuration xmlns="http://schemas.microsoft.com/vstudio/vsdconfig/2008">

  <ManagedComponent
    ComponentId="C4256689-AC45-4B10-BFD3-4036CEE1863A"
    ComponentLevel="9992000"
    AssemblyName="HelloWorld">

    <Class Name="HelloWorld.CSF" >

      <Implements>
        <InterfaceGroup>
          <NoFilter></NoFilter>
          <Interface Name="IDkmCustomVisualizer"/>
        </InterfaceGroup>
      </Implements>
    </Class>

  </ManagedComponent>
</Configuration>

Thanks in advance


回答1:


Pierson's advice for analyze logs was helpful, and finally I was able to run IDkmCustomVisualizer implemented in C# but only for debugging C++ apps. For managed apps it is not called. Found good alternative IDkmLanguageExpressionEvaluator that implemented in C# is called by both managed and unmagaged (C++) apps.



来源:https://stackoverflow.com/questions/59061363/how-to-implement-idkmcustomvisualizer-for-managed-target

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!