在natvis文件中使用宏? 我刚刚在VisualStudio中了解了 .NATVIS/COD>文件,我为Ruby C++扩展项目设置了一些。p>
但是,我尝试在条件语句中使用一个Ruby宏,然后出现错误:在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'.
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