VS2015 Visualiser, (*.natvis) DisplayString 调用函数显示值

Posted

技术标签:

【中文标题】VS2015 Visualiser, (*.natvis) DisplayString 调用函数显示值【英文标题】:VS2015 Visualiser, (*.natvis) DisplayString call a function to display the value 【发布时间】:2015-12-05 07:24:05 【问题描述】:

我有一个复杂的类 (MyClass),它有一个名为 ToString() 的函数,该函数返回字符串的字符串表示形式。

我希望 Visual Studio 可视化器使用该函数来显示变量

这是我的可视化工具,

<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="MyClass">
    <DisplayString>...</DisplayString> 
  </Type>
</AutoVisualizer>

如果我使用

...
  <DisplayString>ToString</DisplayString> 
...

函数的地址返回,是否可以显示函数的结果?

如果不是,显示类的字符串表示的最佳方式是什么?

【问题讨论】:

【参考方案1】:

方法不能被调用。

来自MSDN Forums:

从调试器调用函数是在玩火。您可能会在跨线程依赖项上死锁(即使您没有任何显式的跨线程依赖项,也有用于内存分配之类的共享锁)。这就是 C++ 调试器不支持隐式 funceval 的原因

【讨论】:

猜猜这是有道理的……但并不理想。 鉴于监视窗口中支持方法,并且其他语言的默认可视化工具也支持,我怀疑评论更多的是借口。如果有人可以为此编写一个可视化插件,那就太好了。 为什么访问类中的非原子数据成员不一样?它可能具有跨线程依赖关系。我在这里很有偏见,因为无论如何我只想要功能;)

以上是关于VS2015 Visualiser, (*.natvis) DisplayString 调用函数显示值的主要内容,如果未能解决你的问题,请参考以下文章

Yellowbrick visualiser.fit() 引发 ValueError

LVSLVS集群NAT模式

进程之间的通信:tcp vs unix sockets,ipc vs nats

实现NAT模式的LVS

LVS-NAT实现方式

实现lvs调度及lvs+keeplivead高可用