Memory leak
Inviato: sab 1 mar 2008, 19:20
Esiste qualche tool che possa tornare utile quando si cercano memory leak ? Che magari traccia il modo in cui il programma alloca, libera o meno, usa la memoria ?
http://www.slacky.eu/index.php?option=c ... &Itemid=56Dani ha scritto:Esiste qualche tool che possa tornare utile quando si cercano memory leak ? Che magari traccia il modo in cui il programma alloca, libera o meno, usa la memoria ?
Codice: Seleziona tutto
==5734== LEAK SUMMARY:
==5734== definitely lost: 3,013,859 bytes in 9,159 blocks.
==5734== indirectly lost: 37,719,580 bytes in 206,773 blocks.
==5734== possibly lost: 12,620 bytes in 14 blocks.
==5734== still reachable: 168,142 bytes in 668 blocks.
==5734== suppressed: 0 bytes in 0 blocks.
==5734== Reachable blocks (those to which a pointer was found) are not shown.
==5734== To see them, rerun with: --leak-check=full --show-reachable=yes
Se il codice è C o C++ puoi usare la libreria mtrace (3) poi usi /usr/bin/mtrace per capire dove hai dimenticato di deallocare.Dani ha scritto:Esiste qualche tool che possa tornare utile quando si cercano memory leak ? Che magari traccia il modo in cui il programma alloca, libera o meno, usa la memoria ?
ehm... non sono un programmatore, ti ho solo suggerito un software che sento sempre nominare come "il tool" per certe cose. Ma non lo conoscoDani ha scritto: Non capisco come usare queste informazioni, e nemmeno le altre salvate nel file di log a dir la verità
Ok usando mtrace ecco una parte del risultato:spina ha scritto:Se il codice è C o C++ puoi usare la libreria mtrace (3) poi usi /usr/bin/mtrace per capire dove hai dimenticato di deallocare.Dani ha scritto:Esiste qualche tool che possa tornare utile quando si cercano memory leak ? Che magari traccia il modo in cui il programma alloca, libera o meno, usa la memoria ?
Spina
Codice: Seleziona tutto
dani[]$ mtrace programma log
Memory not freed:
-----------------
Address Size Caller
0x08056378 0xa at 0xb7df4f90
0x08056388 0x100 at 0xb7e34bb3
0x08056490 0x38 at 0xb7e29ef2
0x080564d0 0x4 at 0xb7e27796
0x080564e0 0x4 at 0xb7e27796
0x08056540 0x40 at 0xb7e33619
0x08056588 0x4 at 0xb7e29075
0x08056598 0x8c at 0xb7e34505
0x08056628 0x1c8 at 0xb7e33217
0x080567f8 0x300 at 0xb7e3325d
0x08056b00 0x38 at 0xb7e29ef2
[...]
Che non sei un bravo programmatoreDani ha scritto:...L'elenco è molto piu' lungo, ma a parte questo come devo interpretare questi dati ?
Ho già visto quel link, ed il programma lo compilo usando l'opzione -g di gcc !spina ha scritto: Che non sei un bravo programmatore. comunque, guarda qui (ricordati di compilare il programma con "-g"):
http://www.gnu.org/software/libtool/man ... races.html
Spina
Allora molto probabilmente gli indirizzi appartengono ad una libreria che usi (e che quindi non è compilata con -g). Se fai un pacchettino del sorgente mandamelo che gli do un occhiata <spina80@freemail.it>.Dani ha scritto: Ho già visto quel link, ed il programma lo compilo usando l'opzione -g di gcc !
Inizialmente assieme ai problemi di memoria mi segnalava anche il file sorgente e la riga corrispondente, ma un volta corretti questi errori mi sono appariti solamente indirizzi come sopra, e nient'altro