2012-04-03 3 views
8

Когда Debug.Assert() вызовы методов существуют в исходном коде, и я скомпилирован в режиме освобождения, компилятор генерирует IL для Debug.Assert(), хотя он не называется?Does Debug.Assert генерирует IL в режиме деблокирования?

Один из наших разработчиков недавно добавил Assert, который отображает информацию о нашей внутренней безопасности. Может ли кто-нибудь взглянуть на IL-код релиза и выяснить текст для утверждения?

+0

Проверьте мой [старая запись в блоге] (HTTP (если DEBUG не определен.): //tjoe.wordpress .com/2007/12/03/cotw-conditionalattribute-class /), имея в виду, что методы 'Debug' украшены' [Conditional ("DEBUG")] '. – CodeNaked

ответ

9

Это не не по умолчанию, если вы не определяете символ DEBUG (и по умолчанию для Release, который выключен).

Чтобы проверить, откройте Свойства проекта и выберите панель «Сборка» в Visual Studio. Он покажет флажок «Определить константу DEBUG». Если он включен для Release, тогда будут срабатывать утверждения; в противном случае они не будут.

7

Нет, члены класса Debug (с атрибутом ConditionalAttribute) не излучают IL. Существует no explicit mention on MSDN, однако следующие две цитаты подразумевают поведение довольно хорошо, так, чтобы увеличить ответ Рой:

При использовании методов в классе отладки для печати отладочной информации и проверить логику с утверждениями, вы можете сделать ваш код более надежный, не влияя на производительность и размер кода вашего товара для доставки.

Таким образом, никакой разницы размер не подразумевает выход из них вообще, и

Атрибут ConditionalAttribute применяется к методам отладки. Компиляторы, которые поддерживают ConditionalAttribute, игнорируют вызовы этих методов , если только «DEBUG» не является условным символом компиляции. Обратитесь к документации компилятора, чтобы определить, поддерживается ли условный атрибут и синтаксис для определения условного символа компиляции .

Это означает, что на уровне компилятора, эти вызовы не будет даже рассматривать

+0

MSDN явно показывает атрибут в [документации уровня метода] (http://msdn.microsoft.com/en-us/library/kssw4w7z.aspx). Он не говорит, что делает этот атрибут, но вы всегда можете найти документацию по самому атрибуту. –

 Смежные вопросы

  • Нет связанных вопросов^_^