strawberry logo lane historia example compilador perl

logo - perl vs python



¿Cómo fuerzo un seguimiento de pila para todos los errores fatales en Perl? (2)

Instale un controlador SIGDIE que llame a Carp :: ¿confesar? ¿O simplemente configura Carp :: confess como el controlador para DIE?

Cuidado con los errores estándar relacionados con eval. Hay un gocha aún más extraño con respecto a los bloques BEGIN. También tenga en cuenta la advertencia ominosa en perlvar .

Consulte esta pregunta para obtener más información sobre la generación de trazas de pila.

En Perl, ¿hay una manera de forzar que todos los errores fatales muestren un seguimiento de pila como el que produce Carp::confess ?

Sé que puedes hacer use warnings FATAL => ''all''; para hacer fatales las advertencias sobre el alcance léxico actual.

Además, es posible usar $SIG{__WARN__} = sub { CORE::die(@_) }; para hacer que todas las advertencias sean fatales en todas partes (que no ha localizado el controlador SIGWARN).

¿Hay una forma limpia de hacer esto, o tengo que modificar SIGDIE? Y si escribo un controlador SIGDIE, ¿cuál es la mejor manera de obtener el rastreo?

Una solución ideal funcionaría con las bibliotecas de prueba estándar, Test::More y amigos.

Actualización: Mark Johnson sugiere usar un controlador SIGDIE para llamar a Carp::confess . Funciona muy bien Aquí está el código:

use Carp; $SIG{ __DIE__ } = sub { Carp::confess( @_ ) };


Vea también el módulo " Carp::Always ", que convierte todos los troqueles y avisa en su código a los stacktraces.