2010-08-24 9 views
10

के आउटपुट की व्याख्या कैसे करूं, मैंने अपने प्रोग्राम में Devel::Leak चलाया है और मुझे वह आउटपुट समझ में नहीं आता है जो यह मुझे दे रहा है।मैं डेवेल :: लीक

शुरू करने के लिए, मुझे लगता है कि यह पॉइंटर्स की एक सूची प्रिंट कर रहा है। क्या मैं उस सूची को सरणी में प्राप्त कर सकता हूं? फिर मैं यह देखने के लिए FindRef का उपयोग कर सकता हूं कि यह कहां से आ रहा है।

उदाहरण के लिए:

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::" 

या छोटे प्रविष्टियों में से एक गुच्छा:

new 0x161c268 : SV = RV(0x3029b40) at 0x161c268 
    REFCNT = 1 
    FLAGS = (ROK) 
    RV = 0x161c218 

मैं इस के साथ क्या करते हैं? मुझे पर्ल संरचना सामग्री (जादू, iv, पीवी, ..) मिलती है, लेकिन मैं यह कहने के लिए कैसे कहूं कि मेरी रिसाव कहां हो रही है?

+1

http://blog.woobling.org/2009/05/become-hero-plumber.html; यह भी देखें http://stackoverflow.com/questions/1359771/perl-memory-usage-profiling-and-leak-detection, http://stackoverflow.com/questions/2223721/common-perl-memory-reference-leak -पटरर्न, http://stackoverflow.com/questions/1663498/finding-a-perl-memory-leak, http://stackoverflow.com/questions/295385/are-there-any-tools-for-finding -मेमरी-लीक्स-इन-माय-पर्ल-प्रोग्राम – Ether

+0

@ लिंक के लिए अन्य धन्यवाद। अधिकतर मैं यह पहचानने के लिए देख रहा हूं कि इन लीक किए गए ऑब्जेक्ट्स को एकत्रित नहीं किया जा रहा है। – mmccoo

उत्तर

1

एक मॉड्यूल के लिए Devel::LeakTrace पर एक नज़र डालें जो रिकॉर्ड करता है कि स्मृति कहां आवंटित की गई है।

+0

दुख की बात है, डेवेल :: लीकट्रेस को जीएलआईबी 1.2 की आवश्यकता है (नवीनतम 2.4 है) और 2003 से अपडेट नहीं किया गया है। हालांकि दिलचस्प लगता है। –

+0

इसलिए मुझे बिल्ड.पीएल का उपयोग करके निर्माण करने के लिए डेवेल :: लीकट्रेस मिला: https://rt.cpan.org/Public/Bug/Display.html?id=59027 लेकिन यह मुझे बता रहा है कि 'perl -MDevel :: LeakTrace -e '{मेरा $ एफ = [1,2,3]; undef $ f '} 'लीक 4 एसवी! यह सही नहीं हो सकता है? –

+0

@ फिलिप, http://search.cpan.org/~gfuji/Test-LeakTrace-0.13/ भी देखें, यह हाल ही में है। – vladr

संबंधित मुद्दे