到目前为止,我已经能够运行并实现该接口并将其用于调试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>
提前感谢
Pierson对于分析日志的建议很有帮助,最后我能够运行在C#中实现的IDkmCustomVisualizer,但仅用于调试C ++应用程序。对于托管应用程序,不会调用它。找到了用C#实现的很好的替代IDkmLanguageExpressionEvaluator,托管和未预定义(C ++)应用程序都调用了它。