Partilhar via


Despejos de objeto

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.

Em um programa do MFC, você pode usar CMemoryState::DumpAllObjectsSince para despejo uma descrição de todos os objetos na heap não desalocada. DumpAllObjectsSince descarta todos os objetos alocados desde a última CMemoryState::Checkpoint. Se nenhum Checkpoint telefonar for realizada, DumpAllObjectsSince descarta todos os objetos e nonobjects atualmente na memória.

Observação:

Antes de usar MFC despejando de objeto, você deve habilitar Como: Ativar diagnóstico de memória.

Observação:

MFC Despeja vazados todos os objetos automaticamente quando seu programa for encerrado, portanto, você não precisa criar código para despejar objetos naquele ponto.

O código a seguir testa um perda de memória, comparando dois estados de memória e descarta todos os objetos se for detectado um vazamento.

Código de Exemplo Legado

if( diffMemState.Difference( oldMemState, newMemState ) )
{
   TRACE( "Memory leaked!\n" );
   diffMemState.DumpAllObjectsSince();
}

O Sumário de despejo de tem esta aparência:

Dumping objects ->

{5} strcore.cpp(80) : non-object block at $00A7521A, 9 bytes long
{4} strcore.cpp(80) : non-object block at $00A751F8, 5 bytes long
{3} strcore.cpp(80) : non-object block at $00A751D6, 6 bytes long
{2} a CPerson at $51A4

Last Name: Smith
First Name: Alan
Phone #: 581-0215

{1} strcore.cpp(80) : non-object block at $00A7516E, 25 bytes long

Programação robusta

Os números nas chaves no início da maioria das linhas especificam a ordem na qual os objetos foram alocados.O objeto alocado mais recentemente possui o maior número e aparece na parte superior do despejo.See Interpretação de despejo de objeto para uma análise mais detalhada desse exemplo.

Para obter o máximo de informações de um despejo do objeto, você pode substituir o Dump função de membro de qualquer CObject-derivados do objeto para Personalização de despejo de objeto.

Você pode conjunto um ponto de interrupção em uma alocação de memória específico, definindo a variável global_afxBreakAlloc o número mostrado das chaves. Se você executar novamente o programa o depurador interromperá a execução quando ocorre a alocação.Em seguida, você pode examinar a pilha de chamadas para ver como seu programa obteve esse ponto.

A biblioteca de time de execução C tem uma função semelhante, _CrtSetBreakAlloc, que pode ser usado para alocações de time de execução C.

Consulte também

Outros recursos

Detecção de perda de memória no MFC