Un breakpoint es un punto del código en el que se desea detener el procesamiento del código y examinarlo. No siempre se desea avanzar paso a paso para encontrar un problema, especialmente uno que solo se produce de vez en cuando. Es muy útil establecer un breakpoint en el punto en el que se produce el problema.
En Smalltalk, se utiliza el método halt para establecer un
punto de interrupción. El mensaje #halt se envía a un objeto que es
el foco inicial del depurador.
Cambia el código del Workspace para añadir un #halt como se
indica a continuación.
| fileNames |
fileNames := OrderedCollection new.
(DirectoryEntry smalltalkImageDirectory)
childrenDo: [ :f | fileNames add: f name. fileNames halt ].
fileNames asArray.
Ejemplo 10.4: Halt: establece un Breakpoint
El objeto que recibe el mensaje
#haltse convierte en el objeto de enfoque del depurador.
Volvamos a pulsar Ctrl-a. (select All) y Ctrl-p (Print-it).
Figura 10.6: Halt
Presiona dos veces Over para sobrepasar el breakpoint.
Figura 10.7: Step Over Breakpoint
Bueno, esto me resulta familiar. Sé lo que hay que hacer aquí.
Fíjate en que el comando halt está dentro de un bucle. Mientras
estés en el bucle, cada vez que pulses Proceed, alcanzarás
el punto de interrupción en la siguiente iteración del bucle.
En muchos entornos de programación, para realizar un cambio es necesario eliminar un proceso, recompilar el código y, a continuación, iniciar un nuevo proceso.
Smalltalk es un entorno vivo. Puedes interrumpir, cambiar o escribir código (botón Create situado en la parte central derecha), reiniciar el marco de la pila y continuar con el procesamiento, ¡todo ello sin deshacer la pila de contexto!
A modo de analogía, en muchos lenguajes de programación, es como si te golpearas el dedo del pie y fueras al médico. El médico te dice: «Sí, te has golpeado el dedo del pie», saca una pistola, te dispara y le envía una nota a tu madre diciendo: «Ten otro hijo». ¡Smalltalk es mucho más amigable!
Ten en cuenta que un gran poder conlleva una gran responsabilidad.29. En un sistema abierto, se puede colocar un punto de interrupción en cualquier lugar, ¡incluso en lugares que pueden interrumpir la interfaz de usuario! Por ejemplo, ¡podría ser perjudicial colocar un punto de interrupción en el código del depurador!