Artigo: 151585 - Última revisão: sexta-feira, 30 de Setembro de 2005 - Revisão: 3.0

Como utilizar _crtBreakAlloc para depurar uma atribuiçã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 | Reduzir tudo

Sumário

Quando o controlo para baixo fugas de memória utilizando a tempo de execução C (CRT) de depuração, muitas vezes é útil definir um ponto de interrupção imediatamente antes de atribuir a memória que faz com que a fuga de. Definindo _crtBreakAlloc ao tempo de compilação ou run-time, poderá provocar um ponto de interrupção definido pelo utilizador num ponto específico de atribuição de memória.

Mais Informação

Quando fugas de memória de controlo com funções de depuração CRT, tais como _CrtDumpMemoryLeaks, é apresentado um número de atribuição incluídos entre chavetas ({}) frequentemente. Por exemplo, segue-se uma fuga de memória no número de atribuição de 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 para a direita antes desta memória é atribuída para que possa percorrer a pilha de chamadas e ver o que funções estão a causar esta memória obter atribuído. _CrtSetBreakAlloc de função CRT de depuração que lhe permite especificar um número de atribuição pelo qual pretende interromper. Este método requer que recompilar o programa sempre que pretender definir um ponto de interrupção atribuição. Um método alternativo é utilizar a janela de monitorização e definir o ponto de interrupção atribuição dinamicamente. Este método tem a vantagem de não requerer alterações de código de origem ou recompilação.

Se está estaticamente a ligar à C Run-time, a variável que pretende alterar denomina _crtBreakAlloc. Se estiver dinamicamente a ligar ao tempo de execução C, a variável que pretende alterar na janela de monitorização {,, msvcr40d.dll} * __p__crtBreakAlloc () se estiver a utilizar o Visual C++ 4.0 ou 4.1. A variável que pretende alterar na monitorização janela deve ser {,, msvcrtd.dll}*__p__crtBreakAlloc() se estiver a utilizar Visual C++ 4.2 ou posterior.

Para determinar qual a versão do CRT é compilação com:
  1. No menu ' Compilar ', seleccione definições.
  2. Em definições para: painel, seleccione a configuração está a criar para. Seleccione o separador C/C ++ e, em seguida, seleccione a categoria de geração de código.
O diálogo de biblioteca de tempo de execução utilizar deverá aparecer a apresentar a versão do CRT estiver a utilizar. (Se esta definição estiver em branco, certifique-se apenas tiver seleccionado uma configuração na definições para: painel.)

Para definir um ponto de interrupção atribuição dinamicamente, execute os seguintes passos:
  1. Inicie a sessão de depuração. No menu ' Compilar ', escolha Debug-> Step Into. Se está a utilizar a "Depuração único com" ou "Depuração Multi-com CRT", siga passo 1a. Caso contrário, siga o passo 1b.

    1. Escreva _crtBreakAlloc na janela de monitorização. Esta opção mostra o número de atribuição actual em que o programa irá parar. Este número de atribuição deve ser a -1 quando inicia o programa pela primeira vez.
    2. Tipo {,, msvcr40d.dll}*__p__crtBreakAlloc() na janela Watch se estiver a utilizar o Visual C++ 4.0 ou 4.1. Tipo {,, msvcrtd.dll}*__p__crtBreakAlloc() se estiver a utilizar Visual C++ 4.2 ou posterior. Esta opção mostra o número de atribuição actual em que o programa irá parar. Este número de atribuição deve ser a -1 quando inicia o programa pela primeira vez.
  2. Faça duplo clique no valor de-1 e introduza o novo número de atribuição que faz com que um ponto de interrupção definido pelo utilizador.
  3. No menu ' Depurar ', escolha Debug-> ir.
Para obter mais informações sobre _crtBreakAlloc, consulte "Rastreio da pilha atribuição Requests" na ajuda online.

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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )