2

たとえば、次のような C# コンソール アプリケーションを実行しています。

int sum=0;
for (i=1;i<100000000;i++)
{
    sum+=getSomeAlmostRandomValue();
    // if (i%10000==0)
    // Console.WriteLine(sum/i);
}

簡単に言えば、多数の反復の結果の平均を確認したいのです。

時々、これまでの平均をチェックして、それがどのように進んでいるかを確認したい...しかし、反復のたびにIF条件をチェックするのは、おそらくあまりにも馬鹿げている/時間がかかる. (これは私の問題を紹介するための単なる例です。IFを持たないようにするために、forループを2つのネストされたforループに分割できることを知っています。しかし、それでも、いくつかの反復ごとにWriteLineをしたくないかもしれません)。したがって、私の本当の質問は次のとおりです。

プログラムを自由に一時停止し、変数 (i,sum) の値を確認する方法はありますか (2 つのコメント行を削除することにより)。

4

5 に答える 5

5

条件付きブレークポイントはあなたの選択です。

ブレークポイントを右クリックし、そこで条件を設定します。こちらのMSDN ブログも参照してください。

ここに画像の説明を入力 ここに画像の説明を入力

于 2013-09-23T09:39:28.843 に答える
1

条件付きブレークポイントを使用して、アプリケーションをデバッグするだけです。たとえば、モジュラス ロジックをブレークポイント条件として使用できます。

i % 10000 == 0

10,000回の反復ごとにブレークポイントに到達します。

于 2013-09-23T09:39:26.160 に答える
0

これは、正しい値をアサートできる単体テストの機が熟しているように見え、手動で定期的にチェックする必要が完全になくなりますが、これが何をしようとしているのかわからないため、私はあなたを助けることはできません.

この特定の例では、IDE で条件付きブレークポイントを使用します。

System.Diagnostics.Debuggerただし、コードで実行する場合は、クラス、Break()メソッドを使用してブレークできます。

System.Diagnostics.DebugクラスにはAssertFail、 、 などの便利なメソッドもありますWriteLineIf

次のようになります。

int sum=0;
for (i=1;i<100000000;i++)
{
    sum+=getSomeAlmostRandomValue();

    if (i%10000==0)
        System.Diagnostics.Debugger.Break();
}

問題Debugger.Breakは、リリース コードにコンパイルされることですが、Debugクラス メソッドのほとんど (すべてではないにしても) はDEBUGコンパイラ シンボルを条件としています。この問題は、独自の条件付きコードを使用して回避できます。

#if DEBUG
    Debugger.Break();
#endif

ただし、デバッグ セッションが終了したら、このコードをコード ベースに残すことを避ける傾向があります。とはいえ、面倒なレガシ コードの周りに小さなデバッグ インフラストラクチャを残しておくと、将来便利になる場合があります。

于 2013-09-23T09:43:06.303 に答える