Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re^4: Hard to Debug windows memory error

by jandrew (Chaplain)
on Dec 31, 2015 at 23:05 UTC ( [id://1151641]=note: print w/replies, xml ) Need Help??


in reply to Re^3: Hard to Debug windows memory error
in thread Hard to Debug windows memory error

kennethk thank you for your suggestion. I did already try BEGIN blocks but I had forgotten to try END blocks. When retesting a simple print statement in an END block didn't even execute. I interpret that to mean that windows killed the general perl interpreter prior to reaching the END block. I hope I read that right.

Replies are listed 'Best First'.
Re^5: Hard to Debug windows memory error
by kennethk (Abbot) on Dec 31, 2015 at 23:19 UTC
    I'd modify your statement to say Windows killed the general perl interpreter prior to reaching that END block. The previously provided link shows order of execution of END blocks. See what happens when you put your END block right before the end of your master script. You may still be able to track down the problem via bisection. An object at the package level of your problematic module may also yield useful information via its DESTROY.

    #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

      kennethk I find that I am not doing a very good job of being precise. The END block that failed to execute in my previous statement was the last line of the master script. I did also attempt a manual DEMOLISH (Moose) block at the end of all classes where all but the master class DEMOLISH executed correctly. The master class DEMOLISH failed repeatably for a very specific attribute clearance with some variations done in testing to validate that was the unclearable attribute. In order to understand if I had somehow triggered the DEMOLISH calls out of sequence I also deleted all class DEMOLISH blocks in order to see if perl's automatic garbage collection would fix the problem as well. Neither solution worked.
        You are reaching the limit of my understanding. Specifically, if you execute the script:
        #!/usr/bin/perl use strict; use warnings; use 5.012; use Phases; my $main_closure = bless {name => 'main_closure'}, 'Phases'; sub closure { say $main_closure; } my $external = bless {name => 'external'}, 'Phases'; END { say 'Main END' } say 'Main Last line';
        with the module
        package Phases; use 5.012; BEGIN { say 'Phases BEGIN' } UNITCHECK { say 'Phases UNITCHECK' } CHECK { say 'Phases CHECK' } INIT { say 'Phases INIT' } END { say 'Phases END' } my $my = bless {name => 'my'}, __PACKAGE__; my $closure = bless {name => 'closure'}, __PACKAGE__; our $our = bless {name => 'our'}, __PACKAGE__; sub closure { print $closure; } sub DESTROY { my $self = shift or say 'Nothing passed to DESTROY' and return; my $name = $self->{name} || '<undef>'; say "Phases DESTROY $name" } 1;
        (borrowed heavily from Know the phases of a Perl program’s execution) outputs
        Phases BEGIN Phases UNITCHECK Phases DESTROY my Phases CHECK Phases INIT Main Last line Phases DESTROY external Main END Phases END Phases DESTROY closure Phases DESTROY our Phases DESTROY main_closure

        What I hear you saying is that you problem happens between "Last line" and "Main END". Are there any variables scoped at script level going out of scope? If you have suspects, you can stick them into closures to make them persist longer; that might identify which package's destructor is responsible.


        #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1151641]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (4)
As of 2024-03-29 08:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found