Anteriormente discutimos los conceptos básicos de cómo escribir y ejecutar un programa perl usando Perl Hello World Example.
En este artículo, revisemos cómo depurar un programa/script de perl usando el depurador de Perl , que es similar a la herramienta gdb para depurar código C.
Para depurar un programa perl, invoque el depurador perl usando "perl -d" como se muestra a continuación.
# perl -d ./perl_debugger.pl
Para comprender los comandos del depurador de perl en detalle, creemos el siguiente programa perl de muestra (perl_debugger.pl).
$ cat perl_debugger.pl #!/usr/bin/perl -w # Script to list out the filenames (in the pwd) that contains specific pattern. #Enabling slurp mode $/=undef; # Function : get_pattern # Description : to get the pattern to be matched in files. sub get_pattern { my $pattern; print "Enter search string: "; chomp ($pattern = <> ); return $pattern; } # Function : find_files # Description : to get list of filenames that contains the input pattern. sub find_files { my $pattern = shift; my (@files,@list,$file); # using glob, obtaining the filenames, @files = <./*>; # taking out the filenames that contains pattern. @list = grep { $file = $_; open $FH,"$file"; @lines = <$FH>; $count = grep { /$pattern/ } @lines; $file if($count); } @files; return @list; } # to obtain the pattern from STDIN $pattern = get_pattern(); # to find-out the list of filenames which has the input pattern. @list = find_files($pattern); print join "\n",@list;
1. Ingrese al depurador de Perl
# perl -d ./perl_debugger.pl
solicita,
DB<1>
2. Ver líneas específicas o declaraciones de subrutinas usando (l)
DB<1> l 10
10:mi $patrón;
DB<2> l get_pattern
11 {
12:my $pattern;
13:print “Ingrese la cadena de búsqueda:“;
14:chomp ($pattern =);
15:devuelve $patrón;
16 }
3. Establezca el punto de interrupción en la función get_pattern usando (b)
DB<3> b buscar_archivos
4. Establezca el punto de interrupción en una línea específica usando (b)
DB<4> b 44
5. Ver los puntos de interrupción usando (L)
DB<5> L
./perl_debugger.pl:
22:mi $patrón =shift;
romper si (1)
44:imprimir unir “\n”,@ lista;
romper si (1)
6. ejecución paso a paso usando (s y n)
DB<5> s
principal::(./perl_debugger.pl:39):$patrón =get_patrón();
DB<5> s
main::get_pattern(./perl_debugger.pl:12):
12:mi $patrón;
Las opciones s y n realizan la ejecución paso a paso de cada declaración. Option s pasos en la subrutina. La opción n ejecuta la subrutina en un solo paso (pasando por encima).
La opción s entra en la subrutina pero mientras que la opción n ejecutaría la subrutina (pasando por encima de ella).
7. Continúe hasta el próximo punto de interrupción (o número de línea o subrutina) usando (c)
DB<5> c
Ingrese la cadena de búsqueda:perl
main::find_files(./perl_debugger.pl:22):
22:my $pattern =shift;
8. Continúe hasta el número de línea específico usando (c)
DB<5> c 36
principal::buscar_archivos(./perl_debugger.pl:36):
36:devolver @lista;
9. Imprime el valor en la variable específica usando (p)
DB<6> p $patrón
perl
DB<7> c
principal::(./perl_debugger.pl:44):imprimir unión “\n”,@list;
DB<7> c
./perl_debugger.pl
Programa depurado finalizado. Use q para salir o R para reiniciar,
use o inhibitor_exit para evitar detenerse después de la finalización del programa,
h q, h R o h o para obtener información adicional.
Después de la última operación de continuación, la salida se imprime en la salida estándar como "./perl_debugger.pl" ya que coincide con el patrón "perl".
10. Obtenga comandos de depuración del archivo (fuente)
El depurador de Perl puede obtener el comando de depuración del archivo y ejecutarlo. Por ejemplo, cree el archivo llamado "debug_cmds" con los comandos de depuración de perl como,
c
p $patrón
q
Tenga en cuenta que R se utiliza para reiniciar la operación (no es necesario salir y volver a iniciar el depurador).
DB<7> R
DB<7> source debug_cmds
>> c
Intro cadena de búsqueda:perl
./perl_debugger.pl
Programa depurado terminado. Use q para salir o R para reiniciar,
use o inhibitor_exit para evitar detenerse después de la finalización del programa,
h q, h R o h o para obtener información adicional.
>> p $patrón
perl
>> q
Nota :Si es relativamente nuevo en Perl, consulte nuestro artículo anterior:20 consejos de programación de Perl para principiantes.
Resumen de los comandos del depurador de perl
Las siguientes opciones se pueden usar una vez que ingrese al depurador de Perl.
- h o h h – para la página de ayuda
- c:para continuar hacia abajo desde la ejecución actual hasta el punto de interrupción, de lo contrario, hasta el nombre de la subrutina o el número de línea,
- p:para mostrar los valores de las variables,
- b:para colocar los puntos de interrupción,
- L:para ver los puntos de interrupción establecidos,
- d:para eliminar los puntos de interrupción,
- s:para pasar a la ejecución de la siguiente línea.
- n:para pasar por encima de la ejecución de la siguiente línea, por lo que si la siguiente línea es una llamada de subrutina, ejecutará la subrutina pero no descenderá a ella para su inspección.
- archivo fuente:para tomar los comandos de depuración del archivo.
- l subname:para ver las sentencias de ejecución disponibles en una subrutina.
- q:para salir del modo depurador.