div
eof
Развернуть Свернуть
Данная статья переведена автоматически. Наведите указатель мыши на предложения статьи, чтобы просмотреть исходный текст. Дополнительные сведения.
Перевод
Текст оригинала
Эта тема еще не получила оценку - Оценить эту тему

_ASSERT _ASSERTE - макрос

Вычисление выражения и создайте отчет об отладке, когда результат False (отладка версия).

_ASSERT( 
   booleanExpression 
);
_ASSERTE( 
   booleanExpression 
);
booleanExpression

Выражения указателей (включая), которое оценивает значение ненулевое, либо 0.

_ASSERT и _ASSERTE макросы предоставляют приложению с чистого и простой механизм для проверки предположений в процессе отладки. Они очень гибки, потому что им не нужно заключать в пределах #ifdef выписки для предотвращения их из розничном вызываться в построении приложения. Такая гибкость достигается с помощью _Отладка макрос. _ASSERT и _ASSERTE доступен, только если _DEBUG указывает. После _DEBUG обращения к данным не определяет макрос удалите во время предварительной обработки.

_ASSERT и _ASSERTE оцените них booleanExpression аргумент и когда результат false (0), они выводятся диагностическое сообщение, и вызов _CrtDbgReportW создать отчет об отладке. _ASSERT макрос выводится простое диагностическое сообщение, пока _ASSERTE включает строковое представление выражения ошибки в сообщении. Эти макросы не выполняют никаких действий, если booleanExpression результатом которого является ненулевое значение.

_ASSERT и _ASSERTE вызовите _CrtDbgReportW, который приводит к тому, что весь вывод находиться в расширенных символах. _ASSERTE введите знак юникода в правильности booleanExpression.

Поскольку _ASSERTE макрос указывает выражение сбоя в созданном отчете, ней позволяет пользователю определить проблемы без обращаться к исходному коду приложения. Однако недостатком существует в том, что каждое выражение предполагаемое by _ASSERTE включает в выходном файле (отладка) версии приложения как строковая константа. Поэтому, если большой объем позвонены к _ASSERTEэти выражения могут значительно увеличить размер выбранного выходного файла.

Если не указан в противном случае с _CrtSetReportMode и _CrtSetReportFile функции сообщения появляются в контекстное меню количество диалоговых окон для установки:

_CrtSetReportMode(CRT_ASSERT, _CRTDBG_MODE_WNDW);

_CrtDbgReport OR _CrtDbgReportW создает отчет об отладке и определяет его назначение или назначения на основании текущих режиме отчета или режимах и в файле, определенных для _CRT_ASSERT тип отчета. По умолчанию сбой проверочного утверждения и ошибки, направляются в окно сообщения отладки. _CrtSetReportMode и _CrtSetReportFile функции, используемые для указания назначения для каждого типа отчета.

Если назначением является окно сообщения отладки и щелкните пользователь Повторить кнопки _CrtDbgReport OR _CrtDbgReportW возвращает 1, вызывать _ASSERT и _ASSERTE макросы для запуска отладчика при условии, что по требованию (JIT) отладка включена.

Дополнительные сведения о процессе создания отчетов, см. _CrtDbgReport, _CrtDbgReportW функция. Дополнительные сведения о разрешении ошибок утверждения и использовании этих макросов, как механизм обработки ошибок отладки см. в разделах С помощью макросов для проверки и отчетности.

_RPT, _RPTF debug - макрос также доступен для формирования отчета о отладки, но они не вычисляется выражение. _RPT макросы создают простой отчет. _RPTF макросы содержат файл-источник и номер линии, где макрос отчета был вызван в созданном отчете. Помимо _ASSERTE макросы ANSI assert программу можно использовать для проверки логики программы. Эта процедура доступна в обеих версиях отладки и выпуска библиотек. Версия расширенных символов этих макросов (доступный_RPTWn" _RPTFWn). Версия расширенных символов идентичны узким версиям символа, за исключением того, что широкие символьные строки используются для всех параметров и выходной строки.

Как _ASSERT и _ASSERTE макросы и получаются путем включения Crtdbg.h приложение необходимо связать с одной из следующих библиотек, поскольку эти макросы вызывающие другие функции времени выполнения.

Libcmtd.lib

Многопоточной статическая библиотека, отладочная версия.

Msvcrtd.lib

Библиотека импорта для Msvcr90d.dll, отладочная версия.

Макрос

Обязательный заголовок

_ASSERT

<crtdbg.h>

_ASSERTE

<crtdbg.h>

В этой программе, в позвонены _ASSERT и _ASSERTE макросы чтобы проверить условие string1 == string2. Если условие не выполняется, эти макросы типа диагностическое сообщение. _RPTn и _RPTFn группа в составе макросы также работается в этой программе, в качестве альтернативы printf функция.

// crt_ASSERT_macro.c
// compile with: /D_DEBUG /MTd /Od /Zi /link /verbose:lib /debug
//
// This program uses the _ASSERT and _ASSERTE debugging macros.
//

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <crtdbg.h>

int main()
{
   char *p1, *p2;

   // The Reporting Mode and File must be specified
   // before generating a debug report via an assert
   // or report macro.
   // This program sends all report types to STDOUT.
   _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
   _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
   _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);

   // Allocate and assign the pointer variables.
   p1 = (char *)malloc(10);
   strcpy_s(p1, 10, "I am p1");
   p2 = (char *)malloc(10);
   strcpy_s(p2, 10, "I am p2");

   // Use the report macros as a debugging
   // warning mechanism, similar to printf.
   // Use the assert macros to check if the 
   // p1 and p2 variables are equivalent.
   // If the expression fails, _ASSERTE will
   // include a string representation of the
   // failed expression in the report.
   // _ASSERT does not include the
   // expression in the generated report.
   _RPT0(_CRT_WARN,
       "Use the assert macros to evaluate the expression p1 == p2.\n");
   _RPTF2(_CRT_WARN, "\n Will _ASSERT find '%s' == '%s' ?\n", p1, p2);
   _ASSERT(p1 == p2);

   _RPTF2(_CRT_WARN, "\n\n Will _ASSERTE find '%s' == '%s' ?\n",
          p1, p2);
   _ASSERTE(p1 == p2);

   _RPT2(_CRT_ERROR, "'%s' != '%s'\n", p1, p2);

   free(p2);
   free(p1);

   return 0;
}
Используйте макрос assert для оценки == p2 выражения p1.  crt_ASSERT_macro.c (54). 
 _ASSERT Находит «i» == p1 «я p2»?  crt_ASSERT_macro.c (55). Ошибка утверждения!  crt_ASSERT_macro.c (58). 

 _ASSERTE Находит «i» == p1 «я p2»?  crt_ASSERT_macro.c (59). Ошибка утверждения: p1 == p2
«I p1»! = «I p2»  
Была ли вам полезна эта информация?
(1500 символов осталось)

Добавления сообщества

ДОБАВИТЬ
© 2013 Microsoft. Все права защищены.