如何为受管理目标实现IDkmCustomVisualizer

问题描述 投票:0回答:1

到目前为止,我已经能够运行并实现该接口并将其用于调试C ++应用程序的this sample。我尝试在C#中实现IDkmCustomVisualizer,旨在用它来调试CLR应用程序。这可能吗 ?我改装了Hello Wrold sample,在其中添加了实现IDkmCustomVisualizer的类并更改了HelloWorld.vsdconfigxml。但是没有任何效果,实验实例中的调试器不使用此实现。在VS 2017和2019社区中进行了尝试。

我的IDkmCustomVisualizer实现:

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;
    }
}

和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>

提前感谢

visual-studio-debugging visual-studio-extensions
1个回答
0
投票

Pierson对于分析日志的建议很有帮助,最后我能够运行在C#中实现的IDkmCustomVisualizer,但仅用于调试C ++应用程序。对于托管应用程序,不会调用它。找到了用C#实现的很好的替代IDkmLanguageExpressionEvaluator,托管和未预定义(C ++)应用程序都调用了它。

© www.soinside.com 2019 - 2024. All rights reserved.