ID do artigo: 151585 - Última revisão: sexta-feira, 30 de setembro de 2005 - Revisão: 3.0

Como usar _crtBreakAlloc para depurar uma alocação de memória

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sumário

Quando rastrear vazamentos de memória usando a depuração C Runtime (CRT), geralmente é útil para definir um ponto de interrupção imediatamente antes de alocar a memória que faz com que o vazamento. Definindo _crtBreakAlloc no tempo de compilação ou tempo de execução, você pode causar um ponto de interrupção definido pelo usuário em um ponto específico de alocação de memória.

Mais Informações

Quando vazamentos de memória de controle com funções de CRT de depuração, tais como _CrtDumpMemoryLeaks, um número de alocação delimitados por chaves ({}) geralmente é exibida. Por exemplo, este é um vazamento de memória em alocação de número 18:
   Detected memory leaks!
   Dumping objects ->
   {18} normal block at 0x00660BE4, 10 bytes long
   Data: <          > CD CD CD CD CD CD CD CD CD CD
   Object dump complete.
					
É útil definir um ponto de interrupção direito antes dessa memória é alocada para que poder percorrer a pilha de chamadas e ver quais funções estão causando essa memória obter alocado. _CrtSetBreakAlloc de função CRT de depuração que lhe permite especificar um número de alocação no qual quebrar. Este método requer que você recompilar seu programa sempre que você deseja definir um ponto de interrupção alocação. Um método alternativo é usar a janela Watch e definir o ponto de interrupção alocação dinamicamente. Esse método tem a vantagem de não exigir alterações de código fonte ou recompilar.

Se você estiver vinculando estaticamente ao tempo de execução C, a variável que você deseja alterar será chamada _crtBreakAlloc. Se você estiver vinculando dinamicamente ao tempo de execução C, a variável que você deseja alterar na janela Watch {,, msvcr40d.dll} * __p__crtBreakAlloc () se você estiver usando o Visual C++ 4.0 ou 4.1. A variável que você deseja alterar na inspeção janela deve ser {,, msvcrtd.dll}*__p__crtBreakAlloc() se você estiver usando o Visual C++ 4.2 ou posterior.

Para determinar qual versão do CRT que você está compilando com:
  1. No menu Build, escolha configurações.
  2. Em configurações para: painel, selecione a configuração estiver criando para. Escolha a guia C/C ++ e selecione a categoria de geração de código.
O diálogo de biblioteca de tempo de execução use deve aparecer exibindo a versão do CRT você está usando. (Se essa configuração estiver em branco, verifique se você só tiver selecionado uma configuração na definições de: painel.)

Para definir um ponto de interrupção alocação dinamicamente, execute as seguintes etapas:
  1. Inicie a sessão de depuração. No menu Build, escolha depurar-> Step Into. Se você estiver usando o "Depuração Single-threaded" ou "Depuração Multi-threaded CRT", execute Etapa 1a. Caso contrário, siga a etapa 1b.

    1. Digite _crtBreakAlloc na janela Watch. Mostra o número de alocação atual em que o programa será interrompida. Esse número de alocação deve ser-1 quando seu programa é iniciado pela primeira vez.
    2. Tipo {,, msvcr40d.dll}*__p__crtBreakAlloc() na janela Watch se você estiver usando o Visual C++ 4.0 ou 4.1. Tipo {,, msvcrtd.dll}*__p__crtBreakAlloc() se você estiver usando o Visual C++ 4.2 ou posterior. Mostra o número de alocação atual em que o programa será interrompida. Esse número de alocação deve ser-1 quando seu programa é iniciado pela primeira vez.
  2. Clique duas vezes no valor-1 e digite o novo número de alocação que faz com que um ponto de interrupção definido pelo usuário.
  3. No menu Debug, escolha depurar-> ir.
Para obter mais informações sobre _crtBreakAlloc, consulte "Controle solicitações de alocação de heap" na Ajuda Online do.

A informação contida neste artigo aplica-se a:
  • The Integrated Debugger nas seguintes plataformas
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 4.1 Subscription
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palavras-chave: 
kbmt kbbug kbcrt kbdebug kbhowto kbide KB151585 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 151585  (http://support.microsoft.com/kb/151585/en-us/ )