Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: b8b08cab82
Fetching contributors…

Cannot retrieve contributors at this time

612 lines (420 sloc) 11.674 kb
0:00:03.700,0:00:06.190
Hola. Bienvenido de nuevo al canal.
0:00:06.190,0:00:09.070
Esta vez voy a hablar
sobre el depurador integrado
0:00:09.070,0:00:11.309
de Perl.
0:00:11.309,0:00:14.089
Normalmente, si tienes un script,
0:00:14.089,0:00:16.350
digamos en este caso 'outline.pl',
0:00:16.350,0:00:21.569
puedes ejecutarlo de esta forma en la línea de comandos:
perl + nombre del script + posibles parámetros
0:00:21.569,0:00:23.960
Así que veamos, si ejecuto este script
0:00:23.960,0:00:25.599
podemos ver que nos devuelve resultados.
0:00:25.599,0:00:29.849
El modo para depurarlo es ejecutar perl -d
0:00:29.849,0:00:33.120
seguido del nombre del script y los parámetros.
0:00:33.120,0:00:33.770
Una vez que lo ejecuto,
0:00:36.240,0:00:38.920
devolverá algún tipo de información,
0:00:38.920,0:00:43.340
aparece la primera de código,
la próxima línea
0:00:43.340,0:00:45.010
que se supone que se va a ejecutar
0:00:45.010,0:00:47.220
y, a continuación, un indicador del sistema
0:00:47.220,0:00:50.290
en el que puedo escribir varios comandos para el depurador
0:00:50.290,0:00:51.839
Lo primero y más importante
0:00:51.839,0:00:52.610
es el comando 'q'
0:00:52.610,0:00:54.960
que nos permitirá abandonar el depurador.
0:00:54.960,0:00:58.000
Así que cuando queramos deshacernos de él,
0:00:58.000,0:00:58.689
presionamos
0:00:58.689,0:01:00.950
q + Entrar y se cierra.
0:01:00.950,0:01:02.820
Ahora, ejecutémoslo de nuevo.
0:01:02.820,0:01:04.840
El segundo más importante
0:01:04.840,0:01:06.420
que es 'h',
0:01:06.420,0:01:08.390
nos proporciona esta ayuda.
0:01:08.390,0:01:12.100
Puedes ver aquí las posibles opciones.
Esto es realmente una lista abreviada de
0:01:12.100,0:01:13.840
opciones del depurador.
0:01:13.840,0:01:18.110
Como ves, hay un montón de
0:01:18.110,0:01:20.800
posibles formas de usar el depurador.
0:01:20.800,0:01:24.520
Para ver el código de nuevo,
0:01:24.520,0:01:25.530
presiono la tecla 'l'
0:01:25.530,0:01:29.120
que nos proporciona un listado del código.
0:01:29.120,0:01:30.400
Y en este comando 'l',
0:01:30.400,0:01:33.660
en este listado, verás los números de línea
0:01:33.660,0:01:35.830
y una flecha apuntando a la
0:01:35.830,0:01:39.260
siguiente línea que se va a ejecutar,
así que esta no se ha ejecutado
0:01:39.260,0:01:40.240
todavía.
0:01:40.240,0:01:43.690
Si quiero ver qué hay en la
variable $file,
0:01:43.690,0:01:45.430
que
0:01:45.430,0:01:47.100
se supone vacía,
0:01:47.100,0:01:49.750
puedo usar el
0:01:49.750,0:01:52.720
comando 'p', cuyo nombre proviene de 'print'
(imprimir en inglés).
0:01:52.720,0:01:54.799
Proporciona el nombre de la variable
0:01:54.799,0:01:56.799
y no imprimirá nada en pantalla.
0:01:56.799,0:01:59.269
En verdad, podría comprobar
0:01:59.269,0:02:02.720
si está definida o no.
0:02:02.720,0:02:05.750
Así que puedo escribir p defined y devolverá
0:02:05.750,0:02:06.869
false.
0:02:08.499,0:02:10.419
Por eso no se imprime nada.
0:02:10.419,0:02:14.299
Si estuviera intentando hacer algo más
complejo, podría comprobar
0:02:14.299,0:02:18.680
si no está definida y devolverá algún
tipo de valor verdadero.
0:02:18.680,0:02:20.180
Pero sea como sea,
0:02:20.180,0:02:24.670
veamos cómo puedo ejecutar estas líneas.
0:02:24.670,0:02:26.959
Me gustaría volver a este punto
0:02:26.959,0:02:29.219
y ejecutar esta línea de código.
0:02:29.219,0:02:33.729
Para hacerlo presiono 's', que significa ejecutar paso a paso,
0:02:33.729,0:02:35.669
y presiono Entrar.
0:02:35.669,0:02:39.560
Eso ejecutará esa línea de código
y me mostrará la siguiente
0:02:39.560,0:02:41.269
línea que se va a ejecutar.
0:02:41.269,0:02:46.040
Si imprimiera el contenido del archivo,
0:02:46.040,0:02:49.140
verás que ya tiene ese valor que fue
0:02:49.140,0:02:51.519
proporcionado en la línea de comandos.
0:02:51.519,0:02:53.119
Una vez que tengo este
0:02:53.119,0:02:54.519
fragmento de información
0:02:54.519,0:02:58.139
sé que quiero llamar a la siguiente línea.
0:02:58.139,0:03:01.379
Ahora la siguiente línea llama a la función 'slurp',
0:03:01.379,0:03:04.180
que viene de otro módulo.
0:03:04.180,0:03:05.949
Si presiono 's' de nuevo
0:03:05.949,0:03:06.939
se ejecutará
0:03:06.939,0:03:08.619
el siguiente
0:03:08.619,0:03:09.499
fragmento de código,
0:03:09.499,0:03:11.999
que realmente llama a esa
0:03:11.999,0:03:13.959
función.
0:03:13.959,0:03:17.539
Lo que ves aquí es que esta vez,
0:03:17.539,0:03:19.200
se escribió
0:03:19.200,0:03:19.839
la primera línea
0:03:19.839,0:03:22.430
que se va a ejecutar en
ese otro archivo.
0:03:22.430,0:03:23.480
Así que puedes ver que
0:03:23.480,0:03:25.150
este es el nombre del
0:03:25.150,0:03:26.619
paquete
0:03:26.619,0:03:29.309
donde está el código.
0:03:29.309,0:03:32.819
'read_file' es el nombre de la función
a la que se llama, lo cual es un poco
0:03:32.819,0:03:36.919
raro, porque llamamos a una función llamada 'slurp'
0:03:36.919,0:03:38.270
y en vez de eso,
0:03:38.270,0:03:38.990
estamos ejecutando 'read_file'.
0:03:38.990,0:03:40.950
Y tendrás que ver qué está pasando allí.
0:03:40.950,0:03:44.559
Este es el nombre del archivo que es
0:03:44.559,0:03:48.479
la implementación real de la función 'read_file'.
0:03:48.479,0:03:51.010
Estamos en la línea 75, así que
0:03:51.010,0:03:52.749
esta será la siguiente
0:03:52.749,0:03:55.489
línea que se va a ejecutar.
0:03:55.489,0:04:00.029
Echemos un vistazo, escribamos 'l'
0:04:00.029,0:04:02.919
y luego un intervalo de números de línea:
0:04:02.919,0:04:04.309
de la setenta a la ochenta.
0:04:04.309,0:04:06.310
Esto nos mostrará las líneas
0:04:08.119,0:04:11.419
de File::Slurp.pm
0:04:11.419,0:04:15.449
(lo que hay entre esas líneas).
Aquí puedes ver que sí, que estamos en la
0:04:15.449,0:04:17.419
función read_file
0:04:17.419,0:04:19.680
como se dijo.
0:04:19.680,0:04:20.580
Sobre esto,
0:04:20.580,0:04:25.340
puedes ver que, en realidad, la función 'slurp'
es un alias para la función read_file.
0:04:25.340,0:04:28.650
Esto explica por qué cuando llamamos a 'slurp'
0:04:28.650,0:04:29.560
realmente,
0:04:29.560,0:04:32.530
nos ejecuta la función read_file.
0:04:32.530,0:04:34.280
Dentro de la función read_file,
0:04:35.469,0:04:37.850
este es el nuevo paso que se va a ejecutar.
0:04:37.850,0:04:39.750
Si quiero hacerlo y ejecutarlo,
0:04:39.750,0:04:41.470
puedo presionar 's' de nuevo,
0:04:41.470,0:04:44.280
pero en verdad no es necesario porque
si solo presiono
0:04:44.280,0:04:47.949
Entrar, lo que no ves es que ejecuta
la misma 's' que
0:04:47.949,0:04:51.690
se escribió antes.
0:04:51.690,0:04:55.389
De esta forma puedo presionar solamente Entrar
todo el tiempo y ver como se ejecuta
0:04:55.389,0:04:56.830
paso a paso
0:04:56.830,0:04:58.160
y recorre
0:04:58.160,0:04:59.659
todos los valores.
0:04:59.659,0:05:03.110
Todos los pasos que hay en el código.
0:05:03.110,0:05:07.499
Después de todo, podrías pensar que esta
no es la función que tú
0:05:07.499,0:05:09.409
querías depurar.
0:05:09.409,0:05:10.539
Querrías pasar de
0:05:10.539,0:05:12.659
esa función.
0:05:12.659,0:05:15.899
De forma que pasaste a esta función slurp
pero no te importa realmente
0:05:15.899,0:05:19.209
porque tú ya sabes que el problema,
sea cual sea el que que estás buscando,
0:05:19.209,0:05:20.069
no está ahí.
0:05:20.069,0:05:23.019
De manera que
querrías volver de esa función
0:05:23.019,0:05:24.470
sin hacerlo paso a paso
0:05:24.470,0:05:25.979
por todas las
0:05:25.979,0:05:31.490
líneas una a una. Para eso está el comando 'r'.
0:05:31.490,0:05:32.949
Antes de hacerlo,
0:05:32.949,0:05:34.239
hagamos otra cosa.
0:05:34.239,0:05:37.729
Veamos el comando 't', que nos proporciona
el seguimiento de la pila.
0:05:37.729,0:05:40.199
Así que cuando presiono 't', puedo ver
0:05:40.199,0:05:41.789
dónde estoy
0:05:41.789,0:05:46.019
en el código y puedes ver que esta es
la única llamada
0:05:46.019,0:05:48.280
que se ha hecho, así que solo hay
0:05:48.280,0:05:50.879
una función en la pila.
0:05:50.879,0:05:52.949
Al presionar 'r',
0:05:52.949,0:05:55.979
volverá de la función actual
0:05:55.979,0:06:00.890
e imprimirá sus valores de retorno
porque esta vez el valor devuelto
0:06:00.890,0:06:04.249
es el contenido del archivo 'Padre.pm'.
0:06:04.249,0:06:06.540
De hecho, ves el contenido del archivo,
0:06:06.540,0:06:10.199
que es solo el final del archivo pm
con la documentación
0:06:10.199,0:06:13.620
y con la lista de los nombres de la gente
0:06:13.620,0:06:19.729
que contribuyó al proyecto Padre.
Y por cierto, gracias a todos ellos.
0:06:19.729,0:06:21.320
Volvamos al código.
0:06:21.320,0:06:24.939
Aquí podrás ver ahora la siguiente línea de código
0:06:24.939,0:06:26.930
que debería ejecutarse,
0:06:26.930,0:06:32.300
la cual es la llamada a EditorTools::Outline,new
y después la función find, es decir,
0:06:32.300,0:06:33.399
el método.
0:06:35.039,0:06:40.099
Así que presionemos 's' de nuevo
y pasemos a ese método.
0:06:40.099,0:06:42.180
Echemos un vistazo
0:06:42.180,0:06:46.680
de la 45 a la 60.
0:06:46.680,0:06:49.059
Verás que,
0:06:49.059,0:06:52.050
probablemente estas son solo lineas vacías
que no se muestran aquí.
0:06:52.050,0:06:56.879
Y luego estamos en el método 'find',
en su primera línea.
0:06:56.879,0:06:57.709
Ahora puedes
0:06:57.709,0:07:00.210
dar otro paso.
0:07:00.210,0:07:02.010
En este momento,
0:07:02.010,0:07:08.089
decidimos que no nos interesa la función
'process_doc', así que no queremos meternos.
0:07:08.089,0:07:09.409
Previamente,
0:07:09.409,0:07:13.589
entramos en la función 'slurp' y
encontramos que no
0:07:13.589,0:07:16.990
nos interesaba, por lo que decidimos salir de ella
usando el comando 'r'.
0:07:16.990,0:07:20.089
Esta vez puedo usar la letra 'n',
0:07:20.089,0:07:21.719
que significa siguiente paso.
0:07:21.719,0:07:25.130
Y si presiono Entrar,
0:07:25.130,0:07:27.999
el código de 'process_doc' se ejecutará,
0:07:27.999,0:07:31.130
pero el depurador parará
0:07:31.130,0:07:32.120
en ese punto
0:07:32.120,0:07:33.360
justo después de la
0:07:33.360,0:07:34.909
llamada a la función.
0:07:34.909,0:07:38.069
Así que la siguiente línea, 53,
0:07:38.069,0:07:40.620
aquí arriba del todo, puedes ver que esta es la siguiente
0:07:40.620,0:07:42.130
línea que se va a ejecutar.
0:07:42.130,0:07:43.839
Y aquí es donde estamos.
0:07:43.839,0:07:45.750
Ahora podemos presionar Entrar otra vez
0:07:45.750,0:07:47.619
y ejecutará
0:07:47.619,0:07:51.460
's' o 'n', así que entrará o pasará de largo:
0:07:51.460,0:07:55.030
cualquiera que fuera la última cosa
que hicimos anteriormente.
0:07:55.030,0:07:56.179
Así que si presiono Entrar ahora,
0:07:56.179,0:07:58.270
pasará de largo
0:07:58.270,0:08:01.419
la llamada a $ppi.
0:08:02.800,0:08:06.750
Creo que es suficiente por ahora.
Probablemente daré otro
0:08:06.750,0:08:08.770
tutorial sobre esto.
0:08:08.770,0:08:14.629
Simplemente, no olvides que usar 'q'
te permitirá salir del depurador.
0:08:14.629,0:08:18.830
Si estás interesado en leer más
sobre el depurador,
0:08:18.830,0:08:23.529
hay un libro excelente. Permíteme enseñarte este.
0:08:23.529,0:08:27.889
Recomiendo comprar este libro y leerlo.
0:08:27.889,0:08:30.830
Yo no lo he escrito,
0:08:30.830,0:08:33.680
pero puedes aprender bastante de él.
0:08:33.680,0:08:36.090
Gracias por ver el vídeo y
0:08:36.090,0:08:36.790
por favor, vuelve más adelante.
¡Adiós!
Jump to Line
Something went wrong with that request. Please try again.