gpt4 book ai didi

c++ - 在 natvis 文件中使用宏?

转载 作者:行者123 更新时间:2023-11-28 06:41:10 25 4
gpt4 key购买 nike

我刚刚了解了 Visual Studio 中的 .natvis 文件,并且一直在为我的 Ruby C++ 扩展项目设置一些文件。 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++ 包装器类中,用于常见类型,例如 StringHash Array 等。我已经能够为这些设置 natvis 规则。但是每当我想使用 Ruby 系统中的一些宏时,我总是会出错。

natvis 文件中不能使用宏吗?

最佳答案

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>

关于c++ - 在 natvis 文件中使用宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25918349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com