Hola a todos.
En esta secuencia vamos para presentar rápidamente el depurador,
y la noción de puntos de ruptura, Los diferentes puntos de interrupción en Pharo.
Lo que verá es que
el sistema esta vivo y que podemos comunicarnos,
tenemos que comunicarnos con ella y sus objetos.
No trabajamos con el código fuente, Trabajamos con objetos,
que tienen un estado, y recibir y enviar mensajes.
No tengas miedo de usar el depurador.
Podemos codificar en depurador, inspecciona el programa mientras se está ejecutando ...
Es una herramienta poderosa y realmente útil.
Conozco a varios desarrolladores, yo mismo incluido
quien tiene una tendencia para desarrollarse directamente en depuradores.
Entonces, una gran cantidad de código está escrito en depuradores en lugar de
en un navegador de código.
La ventaja de eso es, mientras escribes el código,
tienes acceso a la configuración del método, a los objetos, a las variables.
Puedes verlo todo y probarlo.
Tienes todos los datos a mano para poder probarlo
mientras escribía el código.
El depurador se parece a esto.
Hay una barra de título indicando el mensaje de error.
Aquí está la "pila", la pila de llamadas,
es decir, el método de llamada. Aquí podemos ver eso
este método, "performtest" ha llamado al método "testSumming",
que ha llamado el método "lugar",
que ha planteado el problema "No entiende".
Aquí tenemos el código del área que se selecciona aquí.
Lo que se selecciona aquí es el método más la clase DiceHandle,
por lo que aparece en la ventana inferior.
Y justo en la parte inferior tenemos diferentes variables,
todas las variables accesibles
en el contexto de la ejecución en curso,
Para modificar las variables,
para inspeccionar los objetos, etc ...
Es un grupo de acciones en esa área que nos permite
reiniciar la ejecución del método o sumergirse en el código
o vea línea por línea lo que está sucediendo.
Cuando se abre un depurador, cerrarlo no resolverá el problema.
Es mucho más fácil abrir el depurador,
mirar adentro en detalle a lo que está causando el problema
e inspeccione la pila de llamadas y los objetos,
y solucionar el problema en el depurador
en lugar de cerrarlo y luego Adivina por qué se abrió el depurador.
El depurador es tu mejor amigo.
Te permite comunicarte con todos los objetos de contexto,
ya sea la configuración, las variables de instancia, etc ...
Para verificar el estado de todas las variables e incluso modificar este estado.
Para enviar mensajes para verificar el estado de ciertos objetos
o comprueba cómo están reaccionando.
Por supuesto, podemos modificar los métodos. en la pila de llamadas, guardado,
y continúe con el nuevo código Sin ningún problema,
todo sin reiniciar Ejecución desde cero.
Entonces, si un método falla, nosotros corregimos el método,
reiniciamos la ejecución del método y el programa continúa.
Una forma de depurar
eso se usa con mucha frecuencia
está mostrando cosas en la consola.
Podemos ver que esto es realmente
una mala forma de depuración, porque tienes que modificar
todos los métodos en los que desea rastros, y luego modificarlos nuevamente
para eliminarlos cuando el problema se solucione.
Y luego debes saber, o tener una idea, donde está el problema ...
Donde podría estar el problema, o de donde viene,
saber dónde poner la línea y que mostrar
La otra forma de hacer esto está usando puntos de interrupción.
Un punto de interrupción es un lugar en el código donde indicaremos
a Pharo que tiene que parar La próxima vez que pase este lugar.
Entonces el punto de corte más simple es "detener ahora".
Envía el mensaje "ahora" al objeto "Halt", que es una clase,
que detendrá inmediatamente la ejecución.
A partir de ahí, se abrirá un depurador.
Podemos ver línea por línea lo que está sucediendo, el estado del programa, etc ...
Entonces, "Detener ahora" detiene el programa ...
podemos reiniciarlo, pero por ahora está en pausa ...
y abre un depurador con El estado actual de la aplicación.
Entonces, "Detener ahora" es muy bueno,
a menos que lo pones en un método eso se ejecuta constantemente,
incluido por el propio sistema.
Puedes tener docenas de apertura de depuradores
si pones un "alto ahora" en un lugar utilizado por un depurador de apertura.
Entonces pones "Detener ahora" en el código del depurador.
Si se abre el depurador,
ejecutará "Deténgase ahora" en sí mismo,
que abrirá otro depurador, etc., recursivamente y pausa su sistema.
En este caso, usamos "Halt once",
que, una vez que se activa "Halt once", se detiene una vez, se detiene una vez,
y todos los pasajes posteriores a través de "Detener una vez" no hará una pausa en el programa.
Entonces escribimos "Detener una vez" en cualquier parte del código,
lo activamos, una vez,
nosotros ejecutamos el programa,
un depurador se abre y "Detener una vez" se desactiva inmediatamente.
Otra posibilidad es parar después de varias iteraciones.
Podríamos detenernos después de la décima iteración
si sabemos que un elemento en una colección que nos interesa
está en la 10ª posición. No necesariamente vale la pena
depuración de los 9 tiempos anteriores por nada,
así que paramos en la décima iteración.
Otra posibilidad es parar cuando una condición particular
es cierto, entonces para eso tenemos "detener si".
"Detener si" se toma
un símbolo que indica un método,
que tiene que estar en la pila de llamadas para que el depurador se abra,
significa que, si pongo "Halt if:printString"
el dados >> se debe llamar al código de caras
desde el método printString
para el punto de quiebre
para activar y el programa para pausar.
"Si" también puede tomar un bloque.
Podemos poner cualquier bit de código en el bloque,
si se evalúa como verdadero, para hacer que el depurador se detenga,
para que no se abra y el programa para continuar.
Desde las pruebas en Pharo son métodos en la pila de llamadas,
puedes poner el número de prueba, para que un poco de código solo se detenga
cuando se ejecuta desde una prueba.
Todos estos métodos, "ahora", "una vez", "onCount" y "if",
son métodos en la clase Halt.
Puedes estudiar el código, mira qué código le ha hecho,
y también puedes agregar tus propios métodos,
agrega tu propio tipo de punto de interrupción de acuerdo a sus necesidades.
Entonces, en el ejemplo a continuación,
He codificado un punto de interrupción, llamado "entre:y"
que solo detiene el programa
cuando está en medio "minTime" y "maxTime".
Entonces, este programa solo se detendrá,
el depurador solo se abrirá, entre la medianoche y las 2am.
Deberías saber eso El depurador es una herramienta muy poderosa.
Hay muchos puntos de ruptura ya definido en el sistema.
Puedes agregar tantas como quieras.
Para agregar un punto de interrupción, modificar un método, se abre el depurador,
y puedes ver línea por línea que está pasando.
Los puntos de interrupción son realmente potentes.
y no deberías dudar para usarlos o los depuradores.