Dans cette vidéo, j'aimerais vous expliquer comment
marche le debugger et comment vous pouvez vous en servir
pour identifier des bugs, et exécuter des expressions,
interagir avec les objets.
Alors ce que j'ai envie de faire, j'ai envie de reprendre
l'exercice qu'on avait fini et fait ensemble sur le
compteur, donc là, pour cela je prends Monticello, je
vais dans mon Package cache, dans mon cache de package, et
je vois que j'ai un package Counter.
Alors ça me permet un petit peu de vous expliquer aussi
cette fonctionnalité-là. Ce que je peux faire pour m'assurer
que c'est le bon package, je peux browser, c'est-à-dire
je vais aller voir les classes qui sont définies dans le package.
Donc là, je vois que j'ai un package qui s'appelle
MyCounter, qui contient 2 classes, Counter et
CounterTest, et que si je regarde toutes les opérations
de Counter, j'ai bien les 4 méthodes qu'on avait définies
ensemble et de la même manière pour le test.
Donc maintenant, je sais que c'est ce package-là que je
veux charger, je vais faire Load.
Donc maintenant, je vais browser la classe Counter.
Donc la classe Counter, les tests sont verts, donc on peut commencer.
Donc ce que j'aimerais faire, j'aimerais vous montrer
comment on peut utiliser le debugger pour exécuter une
expression pas à pas, et aller ou pas dans les
expressions qu'on a envie de voir de plus près.
Donc pour ça, je vais prendre par exemple le
TestDecrement, je vais faire DebugTest.
Debug test, voilà, donc là encore une fois,
donc qu'est-ce que me montre le debugger?
Le debugger me montre la pile d'exécution.
Donc comme en Pharo tout est message, vous voyez qu'on
peut aller loin dans la pile, qu'au départ on a
exécuté la méthode Run, Undo, des tas de choses comme ça.
Donc pour le moment, c'est le système qui le fait donc on s'en fiche un peu.
Là, j'ai le code qui est en cours d'exécution sur la pile
et j'ai l'état du système.
Donc là, voyez, j'ai une variable locale C, pour le
moment, elle n'a pas été affectée, donc il y a nil dedans.
Et là, je vois que Self en fait est une classe de
CounterTest, c'est la méthode CounterTest>>
#testDecrement
Donc ce que je fais, quand je fais Over, là
j’arrive sur la première expression à exécuter.
Donc notez que là je peux vraiment créer, si j'ai envie,
je peux créer, tout de suite, je peux exécuter cette
expression parce qu'elle est complète,
dans le sens où la classe Counter est définie et puis que
je peux lui envoyer le message New.
Donc là je vois que C est toujours comme ça, et donc là
maintenant, ce que je vais faire, je vais lui dire, ben je veux Over.
Over qu'est-ce que ça veut dire ?
Ça veut dire que je veux exécuter l'expression sans aller à l'intérieur.
Donc là, je suis sur la seconde expression qui est une
affectation, et je vais faire Over encore une fois et là
tout d'un coup ma variable C pointe bien sur un Counter
que je peux voir ici, donc là pour le moment la valeur du Counter est nil.
Maintenant, si j'avais envie de voir comment count:
est implémenté, au lieu d'utiliser Over ce que je
fais c'est que j'utilise Into.
Into ça va aller à l'intérieur de la méthode,
comme ça. Donc là, je vois la définition de la méthode et
encore une fois, je peux interagir avec les arguments.
Donc là j'ai anInteger, si je fais Print, ah ben oui je
vois bien que c'est 7, et puis de toute façon anInteger
je l'ai ici et count pour le moment, ce que je vois, c'est
la variable d'instance, c'est que ça vaut nil.
Et c’est ce qui est affiché ici aussi.
Et donc là je vais continuer, je vais faire Over, parce
que je veux dire, ben je veux sauter au-dessus.
Je veux continuer l'exécution de cette expression.
Donc là.
Maintenant imaginons que je veuille aller dans decrement,
eh ben je vais faire la même chose, je vais faire Into,
decrement voilà, j'ai le code de decrement et
vous avez compris le principe je vais comme ça pouvoir
faire pas à pas l'expression.
Donc maintenant Proceed, qu'est-ce que ça permet de faire?
Ça permet de dire, bah à partir de ce moment-là continue
comme si de rien n'était. Donc c'est ce que je vais faire
et mon test sera vert. Donc maintenant ce que je peux
faire aussi, c'est ce morceau de code j'
aurais pu l'exécuter indépendamment, ça veut dire que je
peux très bien le mettre dans un PlayGround comme ceci,
et là avoir Debug it, ça me donne la même chose.
C'est juste que là c'est compilé un petit peu
différemment mais je vais avoir exactement les mêmes
fonctionnalités, avec mon Counter qui vaut 7,
et si je clique sur le counter je vois bien que j'ai 7
ici et je vais faire Into par exemple,
je vais aller dans decrement, Over, Over
et puis la même chose sur Over.
Donc là, ça va me rendre la valeur de la cascade donc ça
va me rendre le Counter C