如何为托管目标实现 IDkmCustomVisualizer [英] How to implement IDkmCustomVisualizer for managed target

查看:25
本文介绍了如何为托管目标实现 IDkmCustomVisualizer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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.

我的 IDkmCustomVisualizer 实现:

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

和 HelloWorld.vsdconfigxml

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>

提前致谢

推荐答案

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

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.

这篇关于如何为托管目标实现 IDkmCustomVisualizer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆