.NET コンパイラのデバッグ モードとリリース モードの違いに興味があり、.NETでのデバッグとリリース、およびリリースがデバッグとは異なる動作をする理由に関するこれらの質問に出くわしました。この時点まで、私はこれらのコンパイラ モードにあまり注意を払っていませんでした。今、私はそうします。
私の質問は、私がテスト フレームワーク (NUnit) と TDD を使用していると仮定すると、単純に常にリリース モードでコンパイルした場合、何か問題が発生するでしょうか?
.NET コンパイラのデバッグ モードとリリース モードの違いに興味があり、.NETでのデバッグとリリース、およびリリースがデバッグとは異なる動作をする理由に関するこれらの質問に出くわしました。この時点まで、私はこれらのコンパイラ モードにあまり注意を払っていませんでした。今、私はそうします。
私の質問は、私がテスト フレームワーク (NUnit) と TDD を使用していると仮定すると、単純に常にリリース モードでコンパイルした場合、何か問題が発生するでしょうか?
TDD を使用しています。テストを書きます。テストは失敗します。テストに合格するコードを書きます。コードは失敗します。あなたが書いたコードを見ても、それが失敗する明確な理由がわかりません。もう少し推論するか、デバッガーで (TestDriven.Net を使用して) テストを開始し、テストをステップ実行しますか? たぶん、私は自分のコードが機能しない理由を常に把握できるほど頭が良くないだけかもしれませんが、私は通常、困惑したときに後者を実行します。
デバッグ モードでは、多くの最適化がオフになります。これは、スタック トレースを取得すると、元のコードのように見えることを意味します。
デバッグ構成とリリース構成の大きな違いは、 でマークされたメソッドへの呼び出しはConditionalAttribute
、関連するシンボルが定義されている場合にのみコンパイルされることです。したがってDebug
、リリース構成を使用してコンパイルする場合、クラスのメソッドへの呼び出しは含まれません。
これにより、コンソールに情報をダンプするアサーションとコードでコードを飾り立てることができますが、そのオーバーヘッドが出荷コードに現れないことを確信できます。
また、エディット コンティニュは非常に便利なツールであり、リリース ビルドから省略されているメタ情報に依存しています。
デバッグ用。
tvanfosson が言ったように、通常はデバッガーを使用しない場合でも (使用しないことはわかっています)、必要な場合があります。