2011-09-23 12 views
6

cerco di attivare il rilevamento msvc perdita di memoria con il numero di riga come questo frammento di codice che ho trovato here:con boost :: test di

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. 

ho cercato di impostare il preprocessore definire

_CRTDBG_MAP_ALLOC

manualmente nelle proprietà del progetto, ma ho solo questo:

Dumping objects -> 
{1466} normal block at 0x00BD4DD0, 40 bytes long. 
Data: <(o; ; (o; 1 > 28 6F 3B 00 90 A9 3B 00 28 6F 3B 00 00 D6 31 10 

senza numeri di riga. Ho anche cercato di definire manualmente principale utilizzando BOOST_TEST_NO_MAIN e scaricare da me in questo modo:

int main(int argc, char* argv[]) 
{ 
    int res = ::boost::unit_test::unit_test_main(&init_function, argc, argv); 
    _CrtDumpMemoryLeaks(); 
    return res; 
} 

ma anche senza alcun successo. Come si può fare?

risposta

5

Usando Boost.Test è possibile utilizzare --detect_memory_leaks = "numero di allocazione"

+0

Ho accettato questo perché è ancora meglio! – schoetbi

4

In MSVC è possibile impostare un punto di interruzione per il numero di allocazione 1466, nel codice:

_crtBreakAlloc = 1466 

o nella finestra di controllo è possibile aggiungere _crtBreakAlloc e il valore 1466 una volta che l'applicazione è stata avviata (naturalmente è necessario un breakpoint nella funzione principale). More details on MSDN

+0

Questo l'ha risolto. Grazie – schoetbi

0

tenta di utilizzare il debugger! Ad esempio, con l'aiuto di deleaker puoi selezionare lo stack per vedere dove è stata allocata la memoria