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.