Itens de CRT
Este tópico se aplica a:
Edição |
Visual Basic |
C# |
C++ |
Desenvolvedores Web |
---|---|---|---|---|
Express |
Somente nativo |
|||
Padrão |
Somente nativo |
|||
PRO e equipe |
Somente nativo |
Legenda de tabela:
Aplica-se |
|
Não é aplicada |
|
Comando ou comandos oculta por padrão. |
O arquivo de cabeçalho CRTDBG.H define o Macros _ASSERT e _ASSERTE para verificação de declaração.
Macro |
Resultado |
---|---|
_ASSERT |
Se a expressão especificada for avaliada como falso, o arquivo de nome e o número de linha do _ASSERT. |
_ASSERTE |
Same sistema autônomo _ASSERT, além de uma representação de seqüência da expressão ou w sistema autônomo sistema autônomo serted. |
_ASSERTE é mais eficiente porque ele informa a expressão confirmada aconteceu seja falso. Isso pode ser o suficiente para identificar o problema sem referência ao código-fonte.No entanto, a versão de depurar de seu aplicativo irá conter uma constante de seqüência de caracteres para cada expressão declarada usando _ASSERTE. Se você usar muitos _ASSERTE macros, essas expressões de seqüência de caracteres ocupam uma quantidade significativa de memória. Se o que prova que é um problema, use _ASSERT para economizar memória.
Quando _DEBUG é definida, a _ASSERTE macro é definida da seguinte forma:
#define _ASSERTE(expr) \
do { \
if (!(expr) && (1 == _CrtDbgReport( \
_CRT_ASSERT, __FILE__, __LINE__, #expr))) \
_CrtDbgBreak(); \
} while (0)
Se a expressão confirmada for avaliada como falso, _CrtDbgReport é chamado para relatar o erro de declaração (usando uma caixa de diálogo de mensagem por padrão).Se você optar por Tente novamente na caixa de diálogo da mensagem, _CrtDbgReport retorna 1 e _CrtDbgBreak chama o depurador por meio de DebugBreak.
Substituindo printf
_ASSERTE permite que você substitua o código a seguir:
#ifdef _DEBUG
if ( someVar > MAX_SOMEVAR )
printf( "OVERFLOW! In NameOfThisFunc( ),
someVar=%d, otherVar=%d.\n",
someVar, otherVar );
#endif
com uma única demonstrativo:
_ASSERTE(someVar <= MAX_SOMEVAR);
Verificando se há corrupção de heap
O exemplo a seguir utiliza _CrtCheckMemory para verificar se há corrupção de pilha:
_ASSERTE(_CrtCheckMemory());
Verificando a validade do ponteiro
O exemplo a seguir utiliza _CrtIsValidPointer para verificar se a faixa de memória especificado é válida para leitura ou gravação.
_ASSERTE(_CrtIsValidPointer( address, size, TRUE );
O exemplo a seguir utiliza _CrtIsValidHeapPointer para verificar um ponteiro aponta para a memória no heap de local (o heap criado e gerenciado por esta instância de C em time de execução biblioteca — uma DLL pode ter sua própria instância da biblioteca e, portanto, sua própria pilha fora do heap do aplicativo).Essa afirmação não captura apenas nula ou out-of-bounds endereços, mas também os ponteiros para variáveis estáticas, variáveis de pilha e nenhuma Outros memória não-local.
_ASSERTE(_CrtIsValidPointer( myData );
Verificando um bloco de memória
O exemplo a seguir utiliza _CrtIsMemoryBlock para verificar se um bloco de memória no heap de local e tem um tipo válido de bloco.
_ASSERTE(_CrtIsMemoryBlock (myData, size, &requestNumber, &filename, &linenumber));