Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^3: Stupid question (heisenbugs)

by tye (Cardinal)
on May 19, 2011 at 16:47 UTC ( #905749=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Stupid question
in thread Stupid question

Yes, those kind of errors are where any random change can prevent / postpone the error. For example, running under the Perl debugger is frequently one way to make the error go away. This can be a convenient way to get the stack trace and it can be very inconvenient in preventing you from being able to use the debugger to get more information. I've also often seen turning up trace or adding "debug prints" make such bugs no longer reproduce.

But such voodoo changes usually just postpone the problem for a while.

I'm glad you got the call stack and were able to use that to debug the problem that was causing Carp to be called. But if I were in your shoes, then I would be worried of other things eventually causing more "bizarre copy" panics.

In such cases, I usually look for a minor Perl upgrade, upgrades for XS-using modules, or elimination of the use of some XS-using modules.

Also, these bugs are much more likely in an environment like a Perl daemon or like mod_perl where you have an interpreter instance that runs for quite a long time doing tons of things. Re-spawning the daemon periodically or configuring mod_perl to restart children a bit more often can reduce the frequency of such bugs appearing.

- tye        


Comment on Re^3: Stupid question (heisenbugs)
Re^4: Stupid question (heisenbugs)
by runrig (Abbot) on Apr 14, 2012 at 06:05 UTC
    The "bizarre copy" errors from Carp so far seem to only happen when one particular module wants to throw an error (unless I do something like this on purpose). When I apply this eval band aid, Carp reports the real error instead of the useless error that may never be fixed. The error has something to do with lack of ref counting of the stack. It would be nice if Carp were patched as in the RT ticket, as it restores Carp to being at least somewhat useful when this happens.
      The error has something to do with lack of ref counting of the stack.

      Well, that is asserted in https://rt.perl.org/rt3/Public/Bug/Display.html?id=77706 but no justification or even discussion of that assertion is apparent or even linked from it and I find the assertion not credible. Items on the stack in Perl are still ref-counted, just somewhat differently. There may be a fundamental flaw in this difference but I have not heard it described and it is not apparent to me.

      If you run into some actual discussion or even a description that is not ridiculously vague, please point such out.

      - tye        

        Seems like there are just bugs related to altering function arguments, perhaps when they also refer to more global variables, and maybe especially @ARGV. E.g. (copied and modified from bizarre Carp - also I posted a patch in that thread):
        use Carp; Main(@ARGV); sub Main { my $first = shift @ARGV; $ARGV[0] = [qw(1 2 3)]; confess "Rubbish"; exit; }

        I get different results on different versions of perl (tested on 5.8.4, 5.8.8, and 5.14.1). And different results when I comment out the assignment to $ARGV[0].

        But passing @ARGV to Main() and then modifying @ARGV (and Getopt::* modules modify @ARGV by default -- so yes @_ should be copied and parsed instead) seems to be a bad thing (bad in that it triggers bugs in perl/Carp, not that you shouldn't be allowed to do it and perl should blow up).

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (4)
As of 2014-08-31 11:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (294 votes), past polls