1 00:00:02,560 --> 00:00:04,600 Dans cette vidéo, j'aimerais vous expliquer comment 2 00:00:04,767 --> 00:00:07,080 marche le debugger et comment vous pouvez vous en servir 3 00:00:07,247 --> 00:00:10,780 pour identifier des bugs, et exécuter des expressions, 4 00:00:10,947 --> 00:00:12,710 interagir avec les objets. 5 00:00:14,080 --> 00:00:16,030 Alors ce que j'ai envie de faire, j'ai envie de reprendre 6 00:00:16,197 --> 00:00:18,820 l'exercice qu'on avait fini et fait ensemble sur le 7 00:00:19,000 --> 00:00:21,220 compteur, donc là, pour cela je prends Monticello, je 8 00:00:21,387 --> 00:00:25,240 vais dans mon Package cach, dans mon cache de package, et 9 00:00:25,407 --> 00:00:26,320 je vois que j'ai un package Counter. 10 00:00:27,050 --> 00:00:29,010 Alors ça me permet un petit peu de vous expliquer aussi 11 00:00:29,177 --> 00:00:31,560 cette fonctionnalité-là. Ce que je peux faire pour m'assurer 12 00:00:31,727 --> 00:00:35,300 que c'est le bon package, je peux browser, c'est-à-dire 13 00:00:35,560 --> 00:00:37,650 je vais aller voir les classes qui sont définies dans le package. 14 00:00:38,240 --> 00:00:39,830 Donc là, je vois que j'ai un package qui s'appelle 15 00:00:40,000 --> 00:00:42,500 MyCounter, qui contient 2 classes, Counter et 16 00:00:42,667 --> 00:00:44,830 CounterTest, et que si je regarde toutes les opérations 17 00:00:45,000 --> 00:00:48,130 de Counter, j'ai bien les 4 méthodes qu'on avait définies 18 00:00:48,297 --> 00:00:51,240 ensemble et de la même manière pour le test. 19 00:00:51,407 --> 00:00:53,180 Donc maintenant, je sais que c'est ce package-là que je 20 00:00:53,347 --> 00:00:54,490 veux charger, je vais faire Load. 21 00:00:58,300 --> 00:01:02,160 Donc maintenant, je vais browser la classe Counter. 22 00:01:08,200 --> 00:01:11,710 Donc la classe Counter, les tests sont verts, donc on peut commencer. 23 00:01:15,000 --> 00:01:16,680 Donc ce que j'aimerais faire, j'aimerais vous montrer 24 00:01:16,847 --> 00:01:19,470 comment on peut utiliser le debugger pour exécuter une 25 00:01:19,637 --> 00:01:22,260 expression pas à pas, et aller ou pas dans les 26 00:01:22,427 --> 00:01:23,720 expressions qu'on a envie de voir de plus près. 27 00:01:24,530 --> 00:01:26,800 Donc pour ça, je vais prendre par exemple le 28 00:01:27,000 --> 00:01:30,300 TestDecrement, je vais faire DebugTest. 29 00:01:30,467 --> 00:01:35,420 Debug test, voilà, donc là encore une fois, 30 00:01:35,587 --> 00:01:36,700 donc qu'est-ce que me montre le debugger? 31 00:01:36,867 --> 00:01:38,880 Le debugger me montre la pile d'exécution. 32 00:01:39,047 --> 00:01:41,830 Donc comme en Pharo tout est message, vous voyez qu'on 33 00:01:42,000 --> 00:01:46,860 peut aller loin dans la pile, qu'au départ on a 34 00:01:47,027 --> 00:01:50,160 exécuté la méthode Run, Undo, des tas de choses comme ça. 35 00:01:50,327 --> 00:01:53,240 Donc pour le moment, c'est le système qui le fait donc on s'en fiche un peu. 36 00:01:54,530 --> 00:01:59,300 Là, j'ai le code qui est en cours d'exécution sur la pile 37 00:01:59,730 --> 00:02:00,930 et j'ai l'état du système. 38 00:02:01,097 --> 00:02:03,060 Donc là, voyez, j'ai une variable locale C, pour le 39 00:02:03,227 --> 00:02:05,480 moment, elle n'a pas été affectée, donc il y a 1 000 dedans. 40 00:02:06,150 --> 00:02:08,800 Et là, je vois que Self en fait est une classe de 41 00:02:09,380 --> 00:02:13,770 CounterTest, c'est la méthode CounterTest, Test 42 00:02:14,880 --> 00:02:15,580 Decrement. . 43 00:02:16,690 --> 00:02:21,420 Donc ce que je fais, quand je fais Over, là j' 44 00:02:21,587 --> 00:02:24,370 arrive sur la première expression à exécuter. 45 00:02:24,537 --> 00:02:26,540 Donc notez que là je peux vraiment créer, si j'ai envie, 46 00:02:26,707 --> 00:02:28,720 je peux créer, tout de suite, je peux exécuter cette 47 00:02:28,887 --> 00:02:32,340 expression parce qu'elle est complète, et ça veut dire 48 00:02:32,507 --> 00:02:34,190 dans le sens où la classe Counter est définie et puis que 49 00:02:34,357 --> 00:02:35,380 je peux lui envoyer le message New. 50 00:02:36,120 --> 00:02:38,790 Donc là je vois que C est toujours comme ça, et donc là 51 00:02:38,957 --> 00:02:40,650 maintenant, ce que je vais faire, je vais lui dire, ben je veux Over. 52 00:02:40,817 --> 00:02:41,910 Over qu'est-ce que ça veut dire ? 53 00:02:42,077 --> 00:02:45,840 Ça veut dire que je veux exécuter l'expression sans aller à l'intérieur. 54 00:02:47,430 --> 00:02:52,150 Donc là, je suis sur la seconde expression qui est une 55 00:02:52,317 --> 00:02:55,400 affectation, et je vais faire Over encore une fois et là 56 00:02:55,567 --> 00:02:59,940 tout d'un coup ma variable C pointe bien sur un Counter 57 00:03:00,340 --> 00:03:04,300 que je peux voir ici, donc là pour le moment la valeur du Counter est 1 000. 58 00:03:04,467 --> 00:03:07,960 Maintenant, si j'avais envie de voir comment Count deux 59 00:03:08,127 --> 00:03:11,600 points est implémenté, au lieu d'utiliser Over ce que je 60 00:03:11,767 --> 00:03:12,520 fais c'est que j'utilise Into. 61 00:03:12,687 --> 00:03:16,140 Into ça va aller à l'intérieur de la méthode, 62 00:03:17,510 --> 00:03:20,050 comme ça. Donc là, je vois la définition de la méthode et 63 00:03:20,217 --> 00:03:22,160 encore une fois, je peux interagir avec les arguments. 64 00:03:22,580 --> 00:03:26,350 Donc là j'ai anInteger, si je fais Print, ah ben oui je 65 00:03:26,517 --> 00:03:28,230 vois bien que c'est 7, et puis de toute façon anInteger 66 00:03:28,397 --> 00:03:32,930 je l'ai ici et count pour le moment, ce que je vois, c'est 67 00:03:33,097 --> 00:03:35,460 la variable d'instance, c'est que ça vaut 1 000. 68 00:03:35,627 --> 00:03:37,210 Et ce qui est affiché ici aussi. 69 00:03:38,750 --> 00:03:41,530 Et donc là je vais continuer, je vais faire Over, parce 70 00:03:41,697 --> 00:03:44,450 que je veux dire, ben je veux sauter au-dessus. 71 00:03:44,617 --> 00:03:46,360 Je veux continuer l'exécution de cette expression. 72 00:03:49,740 --> 00:03:50,373 Donc là. 73 00:03:51,860 --> 00:03:53,370 Maintenant imaginons que je veuille aller dans decrement, 74 00:03:53,537 --> 00:03:55,690 eh ben je vais faire la même chose, je vais faire Into, 75 00:03:56,190 --> 00:04:00,670 decrement voilà, j'ai le code de et 76 00:04:01,310 --> 00:04:04,890 vous avez compris le principe je vais comme ça pouvoir 77 00:04:05,057 --> 00:04:07,190 faire pas à pas l'expression. 78 00:04:11,230 --> 00:04:13,280 Donc maintenant Proceed, qu'est-ce que ça permet de faire? 79 00:04:13,447 --> 00:04:15,950 Ça permet de dire, bah à partir de ce moment-là continue 80 00:04:16,117 --> 00:04:18,310 comme si de rien n'était. Donc c'est ce que je vais faire 81 00:04:18,750 --> 00:04:22,750 et mon test sera vert. Donc maintenant ce que je peux 82 00:04:22,917 --> 00:04:27,760 faire aussi, c'est ce morceau de code j' 83 00:04:27,927 --> 00:04:29,810 aurais pu l'exécuter indépendamment, ça veut dire que je 84 00:04:30,000 --> 00:04:32,850 peux très bien le mettre dans un PlayGround comme ceci, 85 00:04:33,017 --> 00:04:37,920 et là avoir des bug it, ça me donne la même chose. 86 00:04:38,960 --> 00:04:40,630 C'est juste que là c'est compilé un petit peu 87 00:04:40,797 --> 00:04:43,930 différemment mais je vais avoir exactement les mêmes 88 00:04:44,097 --> 00:04:47,710 fonctionnalités, avec mon Counter qui vaut 7, 89 00:04:49,550 --> 00:04:52,080 et si je clique sur le counter je vois bien que j'ai 7 90 00:04:52,350 --> 00:04:57,020 ici et je vais faire Into par exemple, 91 00:04:57,960 --> 00:04:59,850 je vais aller dans decrement, Over, Over 92 00:05:03,030 --> 00:05:05,320 et puis la même chose sur Over. 93 00:05:08,810 --> 00:05:12,430 Donc là, ça va me rendre la valeur de la cascade donc ça 94 00:05:12,597 --> 00:05:13,440 va me rendre le Counter C