Matt Sergeant asked:
> I have an error on my server that I think is caused by an infinite loop in
> perl code [*]. Does anyone have a reliable way to detect where this is
> happening on a server with lots of code?
>
----
  $SIG{ALRM} = sub {
    Carp::confess("Got Apache::Event ALRM");
  };
  alarm(300);
----
Replacing 300 with some amount which any process should finish in.

Not elegent, but it seems to work. For instance, this:
----
use Carp;

$SIG{ALRM} = sub {
Carp::confess("Got Apache::Event ALRM");
};
alarm(3);
temp();
sub temp {
  sleep(5);
}
----

...gives this result:
----
Got Apache::Event ALRM at testal.pl line 4
        main::__ANON__('ALRM') called at testal.pl line 9
        main::temp() called at testal.pl line 7
----

...which even shows which line Perl was up to when the SIGALRM was called
(line 9 in this case).


Reply via email to