演習 - ブレークポイントを設定する

完了

ブレークポイントは、デバッグ プロセスの一時停止の実行中に使用されます。 これにより、変数を追跡し、コードが実行されるシーケンスを調べることができます。 ブレークポイントは、デバッグ プロセスを開始するための優れた方法です。

ブレークポイントを設定する

このモジュールの前半では、デバッガーでアプリケーションを実行する演習を完了しました。 アプリケーションがデバッグ コンソール パネルに「挨拶メッセージ」と表示されました。 演習の最後に、コードが予期しない方法で Andrew のあいさつを繰り返していることに気付きました。

この演習では、ブレークポイントを使用して問題を特定します。

  1. Program.cs ファイルに次のコード サンプルが含まれていることを確認します。

    /* 
    This code uses a names array and corresponding methods to display
    greeting messages
    */
    
    string[] names = new string[] { "Sophia", "Andrew", "AllGreetings" };
    
    string messageText = "";
    
    foreach (string name in names)
    {
        if (name == "Sophia")
            messageText = SophiaMessage();
        else if (name == "Andrew")
            messageText = AndrewMessage();
        else if (name == "AllGreetings")
            messageText = SophiaMessage();
            messageText = messageText + "\n\r" + AndrewMessage();
    
        Console.WriteLine(messageText + "\n\r");
    }
    
    bool pauseCode = true;
    while (pauseCode == true);
    
    static string SophiaMessage()
    {
        return "Hello, my name is Sophia.";
    }
    
    static string AndrewMessage()
    {
        return "Hi, my name is Andrew. Good to meet you.";
    }
    
  2. Visual Studio Code デバッガー ツールを使用して、 foreach ループ内の最初のコード行にブレークポイントを設定します。

    コード内のブレークポイントを示すスクリーンショット。

    ヒント

    ブレークポイントのオン/オフを切り替える簡単なオプションの 1 つは、行番号の左側にある領域を選択 (左クリック) することです。 ブレークポイントは、 Run メニューとキーボード ショートカットを使用して設定することもできます。

  3. [実行] メニューで、[デバッグの開始] を選択します。

  4. コードの実行がブレークポイントで一時停止し、エディターで現在のコード行が強調表示されていることに注意してください。

    ブレークポイントで一時停止されたコード実行を示すスクリーンショット。

  5. [デバッグ コントロール] ツール バーの [ステップ インする] を選択します。

    [デバッグ コントロール] ツール バーのボタンの上にマウス ポインターを置くと、ボタン ラベルを表示できます。

  6. コードの実行が次のコード行に進み、一時停止していることに注意してください。

    messageText = SophiaMessage();
    

    このコード行は、 SophiaMessage メソッドの戻り値を文字列変数 messageTextに割り当てます。

  7. [ ステップ イン ] を選択してこの結果が生成された理由を少し考えてみましょう。

    • [ステップ イン] ボタンを使用して、次の実行可能ステートメントに進みます。
    • names配列の最初の要素がSophiaされ、if ステートメントが名前Sophiaをチェックしているため、式はtrueと評価され、コード実行はif ステートメントのコード ブロックに移動します。
  8. [デバッグ コントロール] ツール バーの [ステップ インする] を選択します。

  9. コードの実行が SophiaMessage メソッドに進み、一時停止していることに注意してください。

    [ステップ イン] ボタンは、次の実行可能コード行に進みます。 次の実行可能コード行はファイル内の次の行番号ではなく、実行パスの次のステートメントです。 この場合、次の実行可能ステートメントは、 SophiaMessage メソッドへのエントリ ポイントです。

  10. [ デバッグ コントロール ] ツール バーの [ ステップ アウト] を選択します。

  11. コードの実行が、 SophiaMessage メソッドを呼び出したコード行に戻り、一時停止していることに注意してください。

  12. [ステップ アウト] を選択してこの結果が生成された理由を少し考えてみましょう。

    メソッド内で[ ステップ アウト ]ボタンをクリックすると、現在のメソッドの残りの行が完了し、メソッドを呼び出した実行コンテキストに戻ります。

  13. [デバッグ コントロール] ツール バーの [ステップ インする] を選択します。

  14. コードの実行が次のコード行に進み、一時停止していることに注意してください。

    messageText = messageText + "\n\r" + AndrewMessage();
    
  15. このコード行に実行が進んだ理由を少し考えてみましょう。

    コードインデントは、このコード行が else if ステートメントのコード ブロックの一部であることを意味しますが、そうではありません。 中かっこ {} を使ってこの if - else if 構造のコード ブロックを定義していれば、このバグを回避するのに役立ったでしょう。 コードが記述されると、ループが反復処理されるたびに Andrew のメッセージが messageText に追加されます。

コードの更新を確認する

コード内の問題を分離したら、コードを更新し、問題が修正されたことを確認する必要があります。

  1. [ デバッグ コントロール ] ツール バーの [ 停止] を選択します。

  2. コード ロジックを修正するには、少し時間がかかります。

    コードで特定された問題を修正するためのオプションがいくつかあります。 例えば次が挙げられます。

    • 既存のコード行を保持したまま、if 構造の各コード ブロックに中かっこ {} を追加することができます。

    • 最後の else if ステートメントに続く 2 つのコード行をマージして、次のように 1 つのステートメントを形成できます。

      else if (name == "AllGreetings")
          messageText = SophiaMessage() + "\n\r" + AndrewMessage();
      

    いずれの方法でも、更新したコードでは、AndrewMessage の呼び出しが name == "AllGreetings" の場合のコード ブロック内に含まれている必要があります。

  3. [ファイル] メニューの [保存] をクリックします。

  4. デバッガー UI ツールを使用して、前に設定したブレークポイントをクリアします。

  5. [実行] メニューで、[デバッグの開始] を選択します。

  6. コードで期待される結果が生成されることを確認します。

    Hello, my name is Sophia.
    
    Hi, my name is Andrew. Good to meet you.
    
    Hello, my name is Sophia.
    Hi, my name is Andrew. Good to meet you.
    
  7. [ デバッグ コントロール ] ツール バーの [ 停止] を選択します。

おめでとうございます! ロジックの問題の分離と修正に役立つ Visual Studio Code デバッガーが正常に使用されました。

まとめ

このユニットで覚えておく必要があるいくつかの重要な点を次に示します。

  • デバッグ セッション中にコードの実行を一時停止するには、ブレークポイントを使用します。
  • [デバッグ コントロール] ツール バーのステップ インを使用して、次の実行可能コード行を確認します。
  • デバッグ コントロール ツール バーからステップ アウトを使用して、現在のメソッドを進め、メソッドを呼び出したコード行に戻ります。