在natvis文件中使用宏? 我刚刚在VisualStudio中了解了 .NATVIS/COD>文件,我为Ruby C++扩展项目设置了一些。p>

在natvis文件中使用宏? 我刚刚在VisualStudio中了解了 .NATVIS/COD>文件,我为Ruby C++扩展项目设置了一些。p>,c++,macros,visual-studio-2013,natvis,C++,Macros,Visual Studio 2013,Natvis,但是,我尝试在条件语句中使用一个Ruby宏,然后出现错误: Natvis: C:\Users\Thomas\Documents\Visual Studio 2013\Visualizers\SUbD.natvis(79,4): Error: identifier "NIL_P" is undefined Error while evaluating 'NIL_P(value_)' in the context of type 'SUbD.so!SUbD::ruby::Numeric'.

但是,我尝试在条件语句中使用一个Ruby宏,然后出现错误:

Natvis: C:\Users\Thomas\Documents\Visual Studio 2013\Visualizers\SUbD.natvis(79,4): Error: identifier "NIL_P" is undefined
    Error while evaluating 'NIL_P(value_)' in the context of type 'SUbD.so!SUbD::ruby::Numeric'.
我尝试的规则是:

<Type Name="SUbD::ruby::Numeric">
  <DisplayString Condition="NIL_P(value_)">Ruby Numeric: Nil</DisplayString>
  <DisplayString>Ruby Numeric: {value_}</DisplayString>
</Type>

Ruby数值:Nil
Ruby Numeric:{value}

在我的项目中,我将露比的<代码>值>代码>类型封装在常见的C++类型的封装类中,例如“代码>字符串”、“代码> Hash < /COD>、<代码>数组< /代码>等,并且我已经能够为这些设置NATVIS规则。但是当我想使用Ruby系统中的一些宏时,我总是会出错

不能在
natvis
文件中使用宏吗?

“Natvis表达式是在被可视化对象的上下文中计算的,而不是在当前堆栈帧中。”调试器无法计算预处理器宏,因此,可视化工具也无法计算。您需要“手动”展开表达式的预处理器宏。例如,如果NIL_P定义为:

#define NIL_P(v) !((VALUE)(v) != Qnil)
那么您的natvis DisplayString标记必须是:

<DisplayString Condition="!((VALUE)(value_) != Qnil)">Ruby Numeric: Nil</DisplayString>
Ruby Numeric:Nil