Domanda

Sto cercando di utilizzare il rilevamento delle perdite di memoria CRT ma continuo a ricevere il seguente messaggio in Microsoft Visual Studio: " Perdite di memoria rilevate - saltando il dump degli oggetti. " Non riesco mai a farlo davvero e ad oggetto il dump.

Ho seguito le istruzioni nell'articolo di Microsoft sul rilevamento delle perdite di memoria ( http://msdn.microsoft.com/en-us/library/e5ewb1h3 (VS.80) .aspx ) senza fortuna.

Nel mio stdafx.h ho (ricostruito l'intero progetto):

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

Nel punto di ingresso della mia domanda ho:

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

Spero anche che visualizzi il nome del file e il numero di riga nel formato pubblicizzato da Microsoft:

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.

Anche se non sono mai stato in grado di ottenere un dump di oggetti, ma ho notato che altre persone dicono di vedere qualcosa in questo senso (anche con _CRTDBG_MAP_ALLOC definito):

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.

Non voglio davvero passare il tempo a sovrascrivere i nuovi operatori ed eliminare gli operatori, quindi speravo che il debug CRT mi avrebbe aiutato. Se il problema persiste, potrei finire per sovrascrivere i nuovi operatori ed eliminare gli operatori, ma desidero davvero ottenere le informazioni di allocazione con un nome file e un numero di riga (incrocio le dita).

Grazie, Kiril

È stato utile?

Soluzione

Non l'ho qui sulla mia macchina, ma quando installi MSVC hai la possibilità di installare (la maggior parte del) codice sorgente per la libreria di runtime C (cioè per MSVCRTxx.xxx). Se cerchi quel codice sorgente per "saltare il dump degli oggetti" allora potresti essere in grado di capire perché il dump dell'oggetto viene ignorato.

Altri suggerimenti

Ho appena usato Visual Leak Detector dopo aver ottenuto un grande dump di oggetti trapelati senza nomi di file / numeri di riga usando l'approccio _CrtDumpMemoryLeaks. VLD ha funzionato come pubblicizzato (è gratuito) e ne sono abbastanza contento.

Il motivo per cui il nome e la riga del file vengono stampati è perché l'allocazione è stata eseguita utilizzando una macro new che passa __FILE__ e __LINE__. se non vuoi toccare new , non passerai __FILE__ e __LINE__ al CRT e non sarà in grado di stampare quello. Non c'è nessuna grande magia coinvolta qui, davvero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top