我刚学习了Visual Studio中的.natvis
文件,并且我已经为我的Ruby C ++ Extension项目设置了一些文件。 http://msdn.microsoft.com/en-us/library/jj620914.aspx
然而,我尝试在条件语句中使用其中一个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的VALUE
类型包装在小型C ++包装类中,用于常见类型,例如String
,Hash
,Array
等。我已经能够为这些设置natvis规则了。但是当我想使用Ruby系统中的一些宏时,我总是会遇到错误。
是否无法在natvis
个文件中使用宏?
答案 0 :(得分:1)
http://msdn.microsoft.com/en-us/library/jj620914.aspx#BKMK_Expressions_and_formatting
“Natvis表达式是在可视化对象的上下文中进行评估的,而不是当前的堆栈帧。”调试器无法评估预处理器宏,因此可视化器也不能。您需要“手动”展开表达式的预处理器宏。例如,如果NIL_P定义为:
#define NIL_P(v) !((VALUE)(v) != Qnil)
然后你的natvis DisplayString标签必须是:
<DisplayString Condition="!((VALUE)(value_) != Qnil)">Ruby Numeric: Nil</DisplayString>