Pergunta

Eu estou tentando usar a detecção de vazamento de memória CRT mas eu continuo recebendo a seguinte mensagem no Microsoft Visual Studio: "vazamentos de memória detectadas - pular despejo objeto" Eu nunca pode obter o que ele realmente faz e despejo de objeto.

Eu segui as instruções no artigo Microsoft em Memória Detecção de Vazamentos ( http://msdn.microsoft.com/en-us/library/e5ewb1h3 (VS.80) .aspx ) sem sorte.

Na minha stdafx.h eu tenho (reconstruiu todo o projeto):

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

No ponto de entrada do meu aplicativo eu tenho:

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

Eu também estou esperando que ele irá exibir o nome do arquivo eo número da linha na Microsoft anunciado formato:

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.

Enquanto eu nunca fui capaz de até mesmo obter um despejo de objeto, mas tenho notado que as outras pessoas dizem que eles vêem algo nesse sentido (mesmo com _CRTDBG_MAP_ALLOC definido):

Detected memory leaks!
Dumping objects ->
{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.

Eu realmente não querem gastar tempo substituindo as novas e excluir operadores, então eu estava esperando que a depuração CRT iria me ajudar. Se isso não der certo eu poderia acabar substituindo os novos e excluir operadores, mas eu realmente quero para obter as informações de alocação com um nome de arquivo e número da linha (cruzes dedos).

Obrigado, Kiril

Foi útil?

Solução

Eu não o tenho aqui na minha máquina, mas quando você instalar MSVC você tem a opção de instalar (a maioria do) o código fonte para a biblioteca de tempo de execução C (ou seja, para MSVCRTxx.xxx). Se você olhar em que o código fonte para "pular despejo objeto", então você pode ser capaz de trabalhar fora porque o despejo de objeto está sendo ignorada.

Outras dicas

Eu apenas usei Visual Leak Detector depois de obter um grande despejo de objetos vazaram sem nomes de arquivos / números de linha usando os _CrtDumpMemoryLeaks aproximar. VLD trabalhou como anunciado (é gratuito) e eu estou muito feliz com isso.

O nome do arquivo razão e linha são impressos é porque a alocação foi feito usando uma macro new que passa __FILE__ e __LINE__. Se você não quer tocar new, você não estará passando __FILE__ e __LINE__ ao CRT e não será capaz de imprimir isso. Não há nenhuma grande mágica envolvida aqui, realmente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top