¿Hay alguna otra forma de depurar Perl aparte de Data::Dumper
y perl -d
?¿Cuáles son algunos buenos métodos de depuración de Perl?
Respuesta
Hay varias herramientas disponibles en Perl para la depuración y tareas similares.
Depurador de línea de comandos incorporado.
perl -d yourcode.pl
Perl/Tk basado depurador gráfico de Andrew E. página.
Esta herramienta de funcionamiento libre tanto en Linux y Windows escrito en Lisp. El código fuente no es disponible.
El depurador Perl expresiones regulares y un artículo sobre el tema escrito por Mark Jason Dominus.
Algunas personas utilizan print
declaraciones con el fin de ver lo que está pasando en secciones de un programa que no están haciendo lo que pensaban que el código haría. (Es decir, como una forma de verificar lo que realmente está contenido en una variable en un punto de ejecución dado).
Dicho esto, la pregunta es bastante vaga. ¿Hay algo que intentes hacer con el que Data :: Dumper y perl -d
no están ayudando?
Las pruebas de escritura en su mayoría pueden disminuir el tiempo de depuración, creo.
Mi rango habitual de herramientas es:
- declaraciones de impresión y datos :: Dumper para casos sencillos
- perl -d
Eso es por lo general suficiente. Hay ddd; Escuché que es bastante agradable, pero nunca jugué con eso.
Para algunas tareas (que en realidad no están depurando, pero cerca de eso) utilizo Devel::NYTProf.
Sugerencia: s/Data :: Dumper/Data :: Dump /. Es mucho más nutritivo. –
Me gusta Devel::Trace. Básicamente le da un volcado de ejecución, que le muestra las rutas de código.
Por otro lado, Test Driven Development está de moda ahora, por lo que también podría estar interesado en herramientas de creación de perfiles como Devel::NYTProf para pruebas muy avanzadas. Consulte esto Tim bunce's blog post para obtener una descripción interesante.
Yo uso ActiveState Komodo para la depuración paso a paso.
tiene un depurador paso a paso para su EPIC plugin
Personalmente prefiero la versión ActiveState. Simplemente parece más sólido y estable, pero cuesta (y el trabajo me paga). Si fuera mi dinero, usaría Eclipse y EPIC ya que son gratuitos.
Prueba :: Más para escribir pruebas básicas, Hook :: LexWrap, Prueba :: MockObject, Prueba :: Profundo, Prueba :: MockTime, Prueba :: WWW :: Mecanizar y muchos otros para pruebas avanzadas. Atributo :: Firma para verificar subparámetros. Carp :: Assert para la programación basada en contrato.
Devel :: Ebug :: Wx o Devel :: ptkdb (y pronto mejor soporte en Padre) se puede utilizar para una depuración más fácil.
Hay un montón de cosas por ahí para ayudarle a:
- Devel::Trace - imprimir cada línea que se ejecuta
- Carp::REPL - gota en un REPL
*
cuando el código emita una advertencia - Devel::ebug - una depurador que puede controlar desde el código de Perl
- Enbugger - use depurador en el tiempo de ejecución independientemente de si su proceso se inició con la depuración
* REPL = Leer, Evaluar, Imprimir Loop (== intérprete interactivo) –
@j_random_hacker Gracias, estoy fuera gracias a YAPC. –
Dependiendo de lo que está haciendo, Log::Log4perl proporciona una manera fácil de gestionar el estilo 'impresión' de depuración particularmente en aplicaciones más grandes:
- proporciona varios niveles de registro (depuración, información, error, advertencia , Fatal)
- controlado desde archivos de configuración (fácil de depurar en el cuadro de desarrollo, solo errores en el cuadro de producción, por ejemplo)
- configurable por secciones de su aplicación (ej. aplicación web en un archivo de registro en un nivel, las secuencias de comandos cron en otro a nivel de registro diferente)
- configurables por clase - fáciles de calmar módulos ruidosos, o añadir una depuración detallada a algún lugar profundo dentro de una aplicación
La mayoría de las personas usa Log :: Log4perl cuando lo hace Log :: Message (un módulo principal). – MkV
El las mejores ayudas para la depuración son pequeñas rutinas, alcances cortos, efectos secundarios limitados y muchas pruebas. Detener los errores antes de que nazcan.
CGI::Dump
Benchmark
Command-line options
__DATA__ & <DATA>
$.
__FILE__ & __LINE__
warn() & die()
uso, Devel :: SimpleTrace, para el más elegante sin costuras sin estado-depuración.
perl -MDevel :: SimpleTrace -we'warn "main"; sub foo {advertir "externo"; sub {advertir "interno"}}; foo() ->()'
Yo generalmente uso
perl -d
para la depuración.
También puede usar el complemento Eclipse Perl Integration (EPIC) para Eclipse. Ofrece un entorno de depuración rico disponible e integrado con el entorno de desarrollo EPIC Perl. Puedes usarlo y generalmente es útil.
Durante el desarrollo, me gusta incorporar sentencias printf en lugares estratégicos (no demasiados) realizadas a través de un indicador de depuración de esta manera:
printf("h='$h', j='$j', ... (%d)\n", __LINE__) if $debug;
donde el indicador de depuración se define en la parte superior del guión :
my $debug = $ENV{DEBUG} || 0;
Ahora, en lugar de tener que recordar a comentar todas las líneas de printf, acabo de funciono con la escritura de la siguiente manera:
DEBUG=1 ./script.pl
Después de la prueba, cuando todo está listo para la producción, las líneas de depuración se puede quitar:
cat script.pl | grep -v 'if $debug;'
Si no te gusta entonces perl -d
Devel::REPL y Carp::REPL son dos buenas alternativas.
lástima Devel :: REPL requiere el Moose de 400 libras (y varios módulos MooseX), y Carp :: REPL depende de Devel :: REPL – MkV
¿Y esto es un problema porque ...? – singingfish
Personalmente, soy un gran fan de Smart::Comments. Hace que el trazado sea simple, sin necesidad de despojarlo tampoco.
use Smart::Comments -ENV;
...
sub myroutine {
my ($self, @args) = @_ ;
### args: @args
...
}
Si Smart_Comments
se ha establecido en el medio ambiente, las líneas comenzando con ### se convierten en la salida de depuración, con Dumper()
utilizado automágicamente. Si la variable de entorno no está configurada, las cosas de depuración son completamente inertes.
Tiene un montón de características, y producirá barras de progreso, advertencias, condiciones de aborto, así como la salida de depuración anterior simple.
Las pruebas adecuadas son todas buenas, y no descarto una buena metodología de desarrollo de TDD, pero cuando intento llegar al fondo de un error existente, Smart :: Comments es el camino a seguir.
Y es un filtro fuente, por lo tanto frágil. – MkV
Emacs, sin duda.
emacs my_script.pl
M-x perldb
Emacs will prompt you :
Run perldb (like this): perl my_script.pl
Hit enter (or add command line switches)
Now use the debugger as usual.
Type 'c' to continue executing the code, which will now follow
your code as you execute through it.
Emacs is fully integrated with its debuggers and will make debugging perl code nearly trivial.
Debug::Statements proporciona una manera fácil de insertar y activar/desactivar las instrucciones de impresión para la depuración.
La función d() imprime el nombre de su variable, su valor y su nombre de subrutina. La implementación se ha optimizado para minimizar las pulsaciones de teclas del programador.
Aquí es código de ejemplo para empezar:
my $myvar = 'some value';
my @list = ('zero', 1, 'two', "3");
my %hash = ('one' => 2, 'three' => 4);
use Debug::Statements;
my $d = 1;
d "Hello world";
d '$myvar';
d '@list %hash';
Salida:
DEBUG sub mysub: Hello world
DEBUG sub mysub: $myvar = 'some value'
DEBUG sub mysub: @list = [
'zero',
1,
'two',
'3'
]
DEBUG sub mysub: %hash = {
'one' => 2,
'three' => 4
}
Muchas opciones están disponibles para personalizar la salida. La documentación completa se puede encontrar en CPAN.
- 1. ¿Cuáles son algunos buenos tutoriales de Wireshark?
- 2. ¿Cuáles son algunos buenos libros UX?
- 3. ¿Cuáles son algunos buenos perfiladores .NET?
- 4. ¿Cuáles son algunos buenos ejercicios de programación de aprendizaje automático?
- 5. ¿Cuáles son algunos buenos ejemplos de uso de WPF Datagrid?
- 6. ¿Cuáles son algunos buenos complementos para desarrollar Java en VIM?
- 7. ¿Cuáles son algunos buenos gestores de colas distribuidos en php?
- 8. ¿Cuáles son algunos buenos recursos de DirectX para un principiante?
- 9. ¿Cuáles son algunos buenos recursos sobre el uso de Lucene.Net?
- 10. ¿Cuáles son algunos buenos ejemplos de Mixins y/o Rasgos?
- 11. ¿Cuáles son algunos buenos principios/tutoriales de Erlang para principiantes?
- 12. ¿Cuáles son algunos buenos métodos para encontrar la "relación" de dos cuerpos de texto?
- 13. ¿Cuáles son algunos buenos recursos informáticos para un programador ciego?
- 14. ¿Cuáles son algunos buenos recursos para GNU Make?
- 15. ¿Cuáles son algunos buenos recursos para aprender a usar NAnt?
- 16. ¿Cuáles son algunos buenos recursos para comprender SNMP MIB?
- 17. ¿Cuáles son algunos buenos perfiladores PHP que se pueden utilizar?
- 18. ¿Cuáles son algunos buenos cebadores/tutoriales Haskell para principiantes?
- 19. ¿Cuáles son algunos buenos recursos para aprender Grails?
- 20. ¿Cuáles son algunos consejos de depuración de Objective-c?
- 21. ¿Cuáles son algunos buenos enfoques para predecir el tiempo de finalización de un proceso largo?
- 22. ¿Cuáles son algunos EWD imperdibles?
- 23. ¿Cuáles son algunos buenos clientes de la interfaz gráfica de usuario de Mercurial para OS X?
- 24. ¿Cuáles son algunos buenos patrones de interfaz de JavaScript/AJAX para sitios web?
- 25. ¿Cuáles son algunos buenos recursos en el diseño de motores de juegos 2D?
- 26. ¿Cuáles son algunos ejemplos de interfaces Go?
- 27. ¿Cuáles son algunos guiones de shell interesantes?
- 28. ¿Cuáles son algunos buenos conjuntos de herramientas para graficar/graficar en una aplicación web?
- 29. ¿Cuáles son algunos buenos proyectos para un desarrollador principiante de Python (pero no nuevo en programación)?
- 30. ¿Cuáles son algunos buenos recursos para escribir un motor de ajedrez?
+ WishPerl - es bueno también – joe