in reply to Re^6: Detecting memory leaks.
in thread Detecting memory leaks.

I'm looking at the synopsis for Devel::Leak, ... What is $handle

Its a scalar :p

use Devel::Leak; warn Devel::Leak::NoteSV(my $handle); {my$a={};$a->{a}=$a;} warn Devel::Leak::CheckSV($handle ); __END__ 6599 at - line 2. new 003F9A6C : new 003F9B1C : 6601 at - line 4.

Replies are listed 'Best First'.
Re^8: Detecting memory leaks.
by Steve_BZ (Chaplain) on May 07, 2015 at 09:30 UTC

    Hi Anon,

    Ok, I ran it and I get a huge list of stuff like this:

    new 0x492bdd8 : new 0x36031a0 : new 0x2930a58 : new 0x2909af8 : old (1): 0 old (1): 0 old (1):

    I guess they are new octal addresses. The counts seem very high, this is what I get:

    my $mu = Memory::Usage->new(); $mu->record('before add appointment'); my $count1 = Devel::Leak::NoteSV(my $handle); __new_appointment($self1, $event1); my $count2 = Devel::Leak::CheckSV($handle ); print $count1, "\n"; print $count2, "\n"; print $count2-$count1, "\n"; $mu->record('after add appointment'); $mu->dump(); __END__ 595269 596072 803 time vsz ( diff) rss ( diff) shared ( diff) code ( diff) + data ( diff) 0 772200 ( 772200) 195796 ( 195796) 43708 ( 43708) 8 ( + 8) 369168 ( 369168) before add appointment 33 794160 ( 21960) 217104 ( 21308) 43972 ( 264) 8 ( +0) 390508 ( 21340) after add appointment

    How can I track down these addresses?

    It's a bit above my pay grade!

    Regards

    Steve.

      Well, you keep sticking notesv/checksv around chunks of code until you narrow it down, then do a code review looking for references

      Or you could try Devel::Cycle which will at least tell you what kind of cycles it found

        Hi Anon,

        So using your narrow review method, the following (ie one function using a hash object)

        my $count1 = Devel::Leak::NoteSV(my $handle); $booking_dlg->{booking_main} = Wx::Panel->new($booking_dlg +, wxID_ANY, wxDefaultPosition,[$gl_cfg->{monitor_resolution_x}, $gl_c +fg->{monitor_resolution_y}], wxNO_BORDER, "" ); my $count2 = Devel::Leak::CheckSV($handle ); print "Count1 = '",$count1,"'\n"; print "Count2 = '",$count2,"'\n"; print "Diff = '",$count2-$count1,"'\n";

        Gives me:

        new 0x9d741e8 : new 0x9d56f70 : new 0x9d44858 : new 0x9d38270 : new 0x9d382d0 : old (1): 0 Count1 = '594970' Count2 = '594974' Diff = '4'

        Maybe I'm using the wrong mental model, but I don't really see how this could be, unless there are new objects being created by Wx::Panel, which are then referred to by references in $booking_dlg->{booking_main} and therefore not dropping out of scope.

        What do you think?

        Regards

        Hi Anon,

        Thanks for your continuing interest!

        Is there some way I can decode the octal references and therefore maybe step through any arrays or hashes looking for content?

        Regards.

        then do a code review looking for references

        looking for CIRCULAR references which you can weaken of Scalar::Util