Использование макросов в файлах natvis?

Я только что узнал о .natvis файлы в Visual Studio, и я настраивал некоторые для моего проекта расширения 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’s VALUE введите небольшие классы оболочки C ++ для распространенных типов, таких как String, Hash, Array и т.д. И я смог установить правила natvis для них. Но всякий раз, когда я хочу использовать некоторые макросы из системы Ruby, я всегда получаю ошибки.

Разве нельзя использовать макросы в natvis файлы?

0

Решение

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>
1

Другие решения


По вопросам рекламы [email protected]