WEBVTT

00:00:02.090 --> 00:00:04.310 align:middle
このセッションでは

00:00:04.477 --> 00:00:08.230 align:middle
デバッガーとバグの見つけ方について
完結させます。

00:00:08.397 --> 00:00:12.440 align:middle
decrement の定義を変えて

00:00:13.610 --> 00:00:14.350 align:middle
わざと間違いを作ってみましょう。

00:00:14.660 --> 00:00:17.950 align:middle
ここで、引き算のかわりに足し算にします。

00:00:19.160 --> 00:00:22.000 align:middle
テストを実行すると
testDecrement は失敗します。

00:00:22.157 --> 00:00:26.440 align:middle
実行してよく見てみると

00:00:26.607 --> 00:00:30.550 align:middle
count は 5 ではなく 9 になっていると
わかります。

00:00:30.717 --> 00:00:33.540 align:middle
つまりここでカウンターが作られているので

00:00:33.707 --> 00:00:36.120 align:middle
このあたりの表現式に誤りがあるはずです。

00:00:36.690 --> 00:00:38.520 align:middle
そこでコードを実行して
カウンターが作られた直後で

00:00:38.800 --> 00:00:42.930 align:middle
止めてみたいと思います。

00:00:43.630 --> 00:00:46.200 align:middle
これでどのメソッドが間違っているか

00:00:46.720 --> 00:00:47.840 align:middle
わかるはずです。

00:00:48.650 --> 00:00:51.400 align:middle
ここに self halt を追加します。
これは　Pharo でブレークポイントを

00:00:51.567 --> 00:00:55.040 align:middle
設定する方法です。
メソッドをコンパイルして

00:00:55.207 --> 00:00:59.630 align:middle
実行します。
コードが実行されて halt のところで止まります。

00:01:00.580 --> 00:01:01.710 align:middle
Over をクリックします。

00:01:02.370 --> 00:01:04.850 align:middle
Into でcount メソッドの内部に入ってみます。

00:01:05.017 --> 00:01:07.110 align:middle
そうすることで

00:01:07.277 --> 00:01:09.790 align:middle
count 値が nil で
anInteger が 7 だとわかります。

00:01:13.500 --> 00:01:17.910 align:middle
そして Over します。

00:01:20.770 --> 00:01:22.580 align:middle
戻って、次は decrement です。

00:01:22.747 --> 00:01:25.730 align:middle
また Into で内部に入って見てみます。

00:01:25.897 --> 00:01:27.540 align:middle
問題はそこにあるはずだからです。

00:01:27.707 --> 00:01:29.680 align:middle
すると decrement は -1 しなければ
ならないことがわかります。

00:01:33.070 --> 00:01:35.680 align:middle
修正します。

00:01:39.170 --> 00:01:41.000 align:middle
そして Proceed をクリックします。

00:01:42.620 --> 00:01:47.530 align:middle
Proceed をクリックすると halt が
まだ残っているので、消します。

00:01:47.697 --> 00:01:51.490 align:middle
Proceed すると、テストはグリーンになります。

