J'ai exécuté Devel::Leak
dans mon programme et je ne comprends pas la sortie qu'il me donne. Pour commencer, je vois qu'il imprime une liste de pointeurs. Puis-je obtenir cette liste dans un tableau? Ensuite, je peux utiliser FindRef pour voir d'où ça vient.Comment interpréter la sortie de Devel :: Leak
Par exemple:
new 0xaebc28 : SV = PVGV(0x30e7e48) at 0xaebc28
REFCNT = 1
FLAGS = (GMG,SMG)
IV = 0
NV = 0
PV = 0
MAGIC = 0x2db7dc0
MG_VIRTUAL = &PL_vtbl_glob
MG_TYPE = PERL_MAGIC_glob(*)
MG_OBJ = 0xaebc28
NAME = "SUPER::"
NAMELEN = 7
GvSTASH = 0x76b228 "IO::File"
GP = 0x314b170
SV = 0x30283c8
REFCNT = 1
IO = 0x0
FORM = 0x0
AV = 0x0
HV = 0x301fdb8
CV = 0x0
CVGEN = 0x0
GPFLAGS = 0x0
LINE = 161
FILE = "/mypath/perl_install/perl/lib/5.8.9/x86_64-linux/IO/File.pm"
FLAGS = 0x0
EGV = 0xaebc28 "SUPER::"
ou un tas de petites entrées:
new 0x161c268 : SV = RV(0x3029b40) at 0x161c268
REFCNT = 1
FLAGS = (ROK)
RV = 0x161c218
Que dois-je faire avec ça? J'obtiens les trucs de structure Perl (magie, iv, pv, ..), mais comment puis-je passer de ces lignes à savoir où ma fuite se produit?
http://blog.woobling.org/2009/05/become-hero-plumber.html; voir aussi http://stackoverflow.com/questions/1359771/perl-memory-usage-profil-and-leak-detection, http://stackoverflow.com/questions/2223721/common-perl-memory-reference-leak -patterns, http://stackoverflow.com/questions/1663498/finding-a-perl-memory-leak, http://stackoverflow.com/questions/295385/are-there-any-tools-for-finding -memory-leaks-in-my-perl-programme – Ether
@Ether Merci pour le lien. La plupart du temps, je cherche à identifier ce que sont ces objets qui fuient plus que pourquoi ils ne sont pas collectés. – mmccoo