[解決済み】Debug.Assert()はいつ使うべきですか?)
2022-04-20 07:16:59
質問
CSを卒業し、プロのソフトウェアエンジニアとして1年程経ちました。C++やC言語では以前からアサーションについて知っていましたが、C#や.NETでは最近まで全く存在を知りませんでした。
私たちのプロダクションコードにはアサートが一切含まれていません。私の質問はこれです...
当社のプロダクションコードで Asserts を使い始めるべきですか?また、その場合、どのような場合に使用するのが最も適切でしょうか?また、その場合、どのような場合に使用するのが適切でしょうか?
Debug.Assert(val != null);
または
if ( val == null )
throw new exception();
解決方法は?
で Microsoft .NET 2.0アプリケーションのデバッグ John Robbinsは、アサーションについて大きなセクションを設けています。彼の主なポイントは以下の通りです。
- 自由にアサルトする。アサーションは多いに越したことはない。
- アサーションは例外を置き換えるものではありません。例外はコードが要求することをカバーし、アサーションはコードが想定することをカバーします。
- うまく書かれたアサーションは、(例外のように) どこで何が起こったかだけでなく、その理由も教えてくれます。
- 例外メッセージはしばしば不可解で、エラーの原因となったコンテキストを再現するためにコードを逆行作業する必要がある場合があります。アサーションは、エラーが発生した時点のプログラムの状態を保持することができます。
- アサーションは、あなたのコードがどのような暗黙の前提に依存しているかを他の開発者に伝える、文書としての役割も果たします。
- アサーションが失敗したときに表示されるダイアログでは、プロセスにデバッガをアタッチして、あたかもそこにブレークポイントを置いたかのようにスタックをつつくことができます。
PS: Code Completeが気に入ったのなら、この本でフォローすることをお勧めします。私はWinDBGとダンプファイルの使い方を学ぶために購入しましたが、前半はバグを未然に防ぐためのヒントが満載です。
関連
-
[解決済み] 2次元ベクトルの外積を計算する
-
[解決済み] ハッシュコードとチェックサム、その違いは?
-
[解決済み] べき乗演算とは何ですか?
-
[解決済み] 関数は return 文を1つだけ持つべきですか?
-
[解決済み] Pythonで悪い/不正な引数の組み合わせに対してどの例外を発生させるべきですか?
-
[解決済み] Java の assert キーワードは何をするのか、そしていつ使うべきなのか?
-
[解決済み] noexceptを本当に使うべきはいつですか?
-
[解決済み] 例外を発生させるタイミングは?
-
[解決済み] なぜすべてのブロックを "try"-"catch "で包んではいけないのですか?
-
[解決済み] なぜハッシュ関数には素数モジュールが必要なのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] C# - Assert()メソッドは何をするメソッドですか?今でも有用ですか?
-
[解決済み] O(N log N)の複雑さ - 線形に似ている?
-
[解決済み] グリーンフィールド・アプリケーションとブラウンフィールド・アプリケーションとは?
-
[解決済み] 言語バインディングとは何ですか?
-
[解決済み] 好きな「プログラマー」アニメは?
-
[解決済み】GOTOはまだ有害と考えられている?[クローズド]
-
[解決済み】なぜソースファイルの最後に空行を入れることが推奨されるのですか?
-
[解決済み] イーガーローディングとは何ですか?
-
[解決済み] 2つの角度の差を求めるにはどうすればよいのでしょうか?
-
[解決済み] 例外やエラーコードの規約 [終了しました]。