_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;
}
Эквивалент в .NET Framework
System:: Устранение неполадок:: отладка:: Assert