首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在natvis文件中使用宏?

在natvis文件中使用宏?
EN

Stack Overflow用户
提问于 2014-09-18 16:57:40
回答 1查看 665关注 0票数 0

我刚刚在Visual中了解了.natvis文件,并为我的Ruby C++扩展项目设置了一些文件。http://msdn.microsoft.com/en-us/library/jj620914.aspx

但是,我尝试在条件语句中使用Ruby宏之一,然后得到错误:

代码语言:javascript
复制
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'.

我正在尝试的规则是:

代码语言:javascript
复制
<Type Name="SUbD::ruby::Numeric">
  <DisplayString Condition="NIL_P(value_)">Ruby Numeric: Nil</DisplayString>
  <DisplayString>Ruby Numeric: {value_}</DisplayString>
</Type>

在我的项目中,我将Ruby的VALUE类型封装在小型C++包装类中,用于常见类型,如StringHashArray等。我已经为这些类型设置了natvis规则。但是,当我想使用Ruby系统中的一些宏时,我总是会遇到错误。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-11 12:51:09

formatting

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

代码语言:javascript
复制
#define NIL_P(v) !((VALUE)(v) != Qnil)

那么,您的natvis DisplayString标记必须是:

代码语言:javascript
复制
<DisplayString Condition="!((VALUE)(value_) != Qnil)">Ruby Numeric: Nil</DisplayString>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25918349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档