C で条件付きブレークポイントを構成する#

完了

Visual Studio Code の C# デバッガーでは、条件が満たされた場合にのみトリガーされるブレークポイントを構成するオプションがサポートされています。 この種類のブレークポイントは、条件付きブレークポイントと呼ばれます。 条件付きブレークポイントは、直接構成することも、既存のブレークポイントを編集して構成することもできます。

Visual Studio Code では、ブレークポイントが "ヒット" された回数に基づいてトリガーされる条件付きブレークポイントもサポートされています。

多次元文字列配列内の製品情報を処理するアプリケーションをデバッグしているとします。 配列には何千ものデータ ポイントが含まれています。 デバッグ中の問題は、 newとしてマークされている製品に対して発生するようです。 コードは、 for ループ内で配列を処理します。 ループ内にブレークポイントを設定する必要がありますが、一時停止するのは製品が new場合のみです。

標準ブレークポイントを使用してデータ処理アプリケーションを調べる

  1. Program.cs ファイルの内容を次のコードに置き換えます。

    int productCount = 2000;
    string[,] products = new string[productCount, 2];
    
    LoadProducts(products, productCount);
    
    for (int i = 0; i < productCount; i++)
    {
        string result;
        result = Process1(products, i);
    
        if (result != "obsolete")
        {
            result = Process2(products, i);
        }
    }
    
    bool pauseCode = true;
    while (pauseCode == true) ;
    

    このコードでは、 LoadProducts という名前のメソッドを使用して、 products 配列にデータを読み込みます。 データが読み込まれた後、コードは配列を反復処理し、 Process1 および Process2という名前のメソッドを呼び出します。

  2. シミュレートされたプロセスのデータを生成するには、Program.cs ファイルの末尾に次のメソッドを追加します。

    static void LoadProducts(string[,] products, int productCount)
    {
        Random rand = new Random();
    
        for (int i = 0; i < productCount; i++)
        {
            int num1 = rand.Next(1, 10000) + 10000;
            int num2 = rand.Next(1, 101);
    
            string prodID = num1.ToString();
    
            if (num2 < 91)
            {
                products[i, 1] = "existing";
            }
            else if (num2 == 91)
            {
                products[i, 1] = "new";
                prodID = prodID + "-n";
            }
            else
            {
                products[i, 1] = "obsolete";
                prodID = prodID + "-0";
            }
    
            products[i, 0] = prodID;
        }
    }
    

    LoadProductsメソッドは、2000 個のランダムな製品 ID を生成し、製品の説明フィールドにexistingnew、またはobsoleteの値を割り当てます。 製品が newマークされている可能性は約1%。

  3. データ処理をシミュレートするには、Program.cs ファイルの末尾に次のメソッドを追加します。

    static string Process1(string[,] products, int item)
    {
        Console.WriteLine($"Process1 message - working on {products[item, 1]} product");
    
        return products[item, 1];
    }
    
    static string Process2(string[,] products, int item)
    {
        Console.WriteLine($"Process2 message - working on product ID #: {products[item, 0]}");
        if (products[item, 1] == "new")
            Process3(products, item);
    
        return "continue";
    }
    
    static void Process3(string[,] products, int item)
    {
        Console.WriteLine($"Process3 message - processing product information for 'new' product");
    }
    

    Process1メソッドとProcess2 メソッドは、進行状況メッセージを表示し、文字列を返します。

    製品がProcess2の場合は、Process3 メソッドがnewを呼び出します。

  4. Visual Studio Code の [ファイル] メニューで、[保存] を選択します。

  5. Program.cs ファイルの先頭付近で、次のコード行にブレークポイントを設定します。

    result = Process1(products, i);
    
  6. [実行とデバッグ] ビューを開き、[ デバッグの開始] を選択します。

  7. ステップ インしてProcess1Process2のコードを調べるために使用してください。

    [実行とデバッグ] ビューの [変数] セクションと [呼び出し履歴] セクションが更新されていることに注目してください。

  8. ステップ イン を使用してコードを追跡し、i が 3 に等しいことが確認できるまで続けてください。

    RUN AND DEBUG ビューの VARIABLES セクションには、 iに割り当てられた値が表示されます。

    Process1Process2デバッグ コンソール パネルにメッセージが表示されていることに注意してください。 実際のアプリケーションでは、データの処理中にユーザーの操作が必要になる場合があります。 一部の操作は、処理中のデータに依存する場合があります。

  9. [停止] ボタンを使用して、コードの実行を停止します。

式を使用して条件付きブレークポイントを構成する

標準的なブレークポイントは、データ処理アプリケーションを実行する場合に最適です。 ただし、この場合、あなたはnew製品に関心があり、newされている製品を見つけるために、各製品の分析をじっくり見て回ることは望んでいません。 このシナリオは、条件付きブレークポイントを使用する必要がある場合の良い例です。

  1. 既存のブレークポイントを右クリックし、[ブレークポイントの 編集] を選択します。

  2. 次の式を入力します。

    products[i,1] == "new";
    
  3. Enter キーを押すと、式が表示されなくなります。

  4. 式を一時的に表示するには、ブレークポイント (赤い点) の上にマウス ポインターを置きます。

  5. 条件付きブレークポイントが構成された状態でアプリケーションを実行するには、[ デバッグの開始] を選択します。

  6. アプリケーションが条件付きブレークポイントで一時停止するのを待ちます。

  7. [変数] セクションに表示される i の値に注目してください。

  8. [デバッグ コントロール] ツール バーの [続行] を選択します。

  9. iの値が VARIABLES セクションに更新されていることに注意してください。

  10. [ステップ イン]を選択します。

  11. メッセージが表示されるまで、[Process1] を選択し続けます。

  12. Process1は、新しい製品で動作していることを報告していることに注意してください。

  13. 少し時間を取って、条件付きブレークポイントが提供する利点を検討してください。

    このシミュレートされたデータ処理シナリオでは、製品が newされる可能性が約 1% あります。 標準的なブレークポイントを使用して問題をデバッグする場合は、約 100 件の製品の分析を行って、関心のある new 製品の 1 つを見つける必要があります。

    条件付きブレークポイントを使用すると、アプリケーションをデバッグするときに時間を節約できます。

  14. [停止] ボタンを使用して、コードの実行を停止します。

おめでとうございます! 条件付きブレークポイントが正常に構成されました。

まとめ

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

  • ブレークポイントが検出されるたびにアプリケーションを一時停止するには、標準のブレークポイントを使用します。
  • ブール式が trueに評価されたときにアプリケーションを一時停止するには、条件付きブレークポイントを使用します。