Compartilhar via


Tipos de blocos na pilha de depuração

This topic applies to:

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável

Pro, Premium e Ultimate

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável

Cada bloco de memória na pilha de depuração é atribuído a um dos cinco tipos de alocação. Esses tipos são controlados e reportados de forma diferente para fins de detecção de vazamento e emissão de relatórios do estado. Você pode especificar o tipo do bloco alocando-la usando uma chamada direta para uma das funções de alocação de heap de depuração como _malloc_dbg. Os cinco tipos de blocos de memória na pilha de depuração (definido nBlockUse membro da _CrtMemBlockHeader estrutura) são os seguintes:

  • _NORMAL_BLOCK
    Uma chamada para malloc ou calloc cria um bloco Normal. Se você pretende usar apenas os blocos normais e não há necessidade de blocos de cliente, convém definir _CRTDBG_MAP_ALLOC, que faz com que a alocação de heap de todas as chamadas sejam mapeados para seus equivalentes de depuração em compilações de depuração. Isso permitirá que o arquivo nome e a linha números informações sobre cada chamada de alocação para ser armazenado no cabeçalho do bloco correspondente.

  • _CRT_BLOCK
    Os blocos de memória alocados internamente por muitas funções de biblioteca de tempo de execução são marcados como CRT blocos para que possam ser manipuladas separadamente. Como resultado, perda de detecção e outras operações não precisam ser afetadas por eles. Uma alocação nunca deve alocar, realocar ou livre de qualquer bloco do tipo do CRT.

  • _CLIENT_BLOCK
    Um aplicativo pode controlar especial de um determinado grupo de alocações para fins de depuração alocando-los como esse tipo de bloco de memória, usando as chamadas explícitas para as funções de heap de depuração. O MFC, por exemplo, aloca todos CObjects como blocos de cliente; outros aplicativos podem manter os objetos de memória diferentes em blocos de cliente. Subtipos de blocos de cliente também podem ser especificados para o maior granularidade de rastreamento. Para especificar os subtipos de blocos de cliente, deslocar o número à esquerda de 16 bits e OR com _CLIENT_BLOCK. For example:

    #define MYSUBTYPE 4
    freedbg(pbData, _CLIENT_BLOCK|(MYSUBTYPE<<16));
    

    Uma função de gancho fornecido pelo cliente para despejar os objetos armazenados em blocos de cliente pode ser instalada usando _CrtSetDumpCliente em seguida, será chamado sempre que um bloco de cliente será despejado por uma função de depuração. Além disso, _CrtDoForAllClientObjects pode ser usado para chamar uma função determinada fornecida pelo aplicativo para cada bloco de cliente na pilha de depuração.

  • _FREE_BLOCK
    Normalmente, os blocos são liberados são removidos da lista. Para verificar que a memória liberada é não ainda sendo gravado ou simular condições de pouca memória, você pode optar por manter o blocos liberados na lista vinculada, marcada como livre e preenchida com um valor de byte conhecidos (no momento, 0xDD).

  • _IGNORE_BLOCK
    É possível desativar as operações de pilha de depuração para um período de tempo. Durante esse tempo, os blocos de memória são mantidos na lista, mas estão marcados como blocos de ignorar.

Para determinar o tipo e subtipo de um determinado bloco, use a função _CrtReportBlockType e as macros _BLOCK_TYPE e _BLOCK_SUBTYPE. As macros são definidas (em crtdbg.h):

#define _BLOCK_TYPE(block)          (block & 0xFFFF)
#define _BLOCK_SUBTYPE(block)       (block >> 16 & 0xFFFF)

Consulte também

Referência

_CrtReportBlockType

Outros recursos

A pilha de depuração do CRT