Como: conjunto pontos de interrupção em um número de alocação de memória
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. |
Observação: |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Para alterar seu configurações , escolher Import and exportar Settings no menu Ferramentas.Para obter mais informações, consulte Configurações do Visual Studio. |
O arquivo de nome e o número de linha no relatório de perda de memória dizer onde vazada memória é alocada, mas saber onde a memória é alocada nem sempre é suficiente para identificar o problema.Com freqüência uma alocação será chamada várias vezes durante uma execução do programa, mas ele poderá divulgar memória apenas em determinadas chamadas.Para identificar o problema, você precisa saber não apenas onde a vazada memória é alocada mas também as condições sob as quais ocorre o vazamento.A parte das informações que lhe permite fazer isso é o número de alocação de memória.Este é o número que aparece entre chaves depois do nome de arquivo e do número da linha aqueles são exibidos.Por exemplo, na saída a seguir, o número de alocação de memória é 18.Significa que a memória vazada é o bloco de memória alocada no seu programa 18.
Detected memory leaks!
Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18}
normal block at 0x00780E80, 64 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
Da biblioteca CRT conta todos sistema autônomo blocos de memória alocados durante uma execução do programa, incluindo a memória alocada da biblioteca CRT propriamente dito ou por outras bibliotecas, sistema autônomo o MFC.Portanto, um objeto com alocação de número N será o Nth objeto alocados em seu programa, mas pode não ser a N th objeto alocado pelo seu código.(Na maioria dos casos, ele não estará.)
Você pode usar o número de alocação para conjunto um ponto de interrupção no local onde a memória é alocada.Para fazer isso, conjunto um ponto de interrupção local perto do início do seu programa.Quando seu programa for interrompido neste ponto, você pode conjunto como um ponto de interrupção de alocação de memória na caixa de diálogo QuickWatch ou da janela Inspeção.
Procedimento
Para conjunto um ponto de interrupção de alocação de memória na janela inspeção
Na janela inspeção, digite a expressão a seguir no Nome coluna:
_crtBreakAlloc
Se você estiver usando a versão DLL multithread da biblioteca CRT (a opção /MD), inclua o operador de contexto, sistema autônomo mostrado aqui:
{,,msvcr71d.dll}_crtBreakAlloc
Pressione RETORNAR.
O depurador avalia a telefonar e coloca o resultado na coluna valor.Este valor será – 1 se você não tiver definido quaisquer pontos de interrupção em alocações de memória.
substituir o valor de Valor coluna com o número de alocação de onde você deseja quebrar a alocação de memória.Por exemplo, 18 para quebrar em alocação mostrada na saída acima.
Depois de conjunto pontos de interrupção nas alocações de memória que você está interessado, você pode continuar a depuração.Tenha cuidado ao executar o programa sob sistema autônomo mesmas condições sistema autônomo a execução anterior para que não altera a ordem de alocação.Quando o programa for interrompida na alocação de memória especificado, você pode olhar na janela telefonar pilha e Outros informações para determinar as condições sob as quais a memória foi alocada do depurador.Se necessário, você pode continuar a execução do programa desse ponto para ver o que acontece com o objeto e talvez determinar por que ele não é corretamente desalocado.
Observação: |
---|
Definindo um bre dados akpoint no objeto pode ser útil.Para obter mais informações, consulte Como: Definir um Ponto de Interrupção de Dados (nativo somente). |
Embora seja normalmente mais fácil de conjunto pontos de interrupção de alocação de memória no depurador, você pode defini-las no seu código, se você preferir.
Para conjunto um ponto de interrupção de alocação de memória no seu código
Adicione uma linha desta (para a alocação de memória 18):
_crtBreakAlloc = 18;
Como alternativa, você pode usar o _CrtSetBreakAlloc função, que tem o mesmo efeito:
_CrtSetBreakAlloc(18);
Consulte também
Tarefas
Como: Usar a Janela Pilha de Chamadasss
Conceitos
Isolamento e detecção de perda de memória