Debug.主張に対す特定の例外がスローされ
-
09-06-2019 - |
質問
だって上澄みを'デバッグです。純2.0アプリケーションによるジョン-ロビンとなってい混乱をきたして彼の伝道のためのデバッグ.Assert(...).
そういう視点ものの実施主張の状態にある場合、検出されたエラーの状態、例えば:
Debug.Assert(i > 3, "i > 3", "This means I got a bad parameter");
現在、個人的には思えるのに夢中したので大好きrestating試験なしには実際に顕'ビジネスロジックコメント、おそらく"か <=3の必要が生じないようでflobittyjam widgitificationいます。
ないかと思いま主張としての低レベルましょう"の保護のた私の前提"のようなものです---この感じにするか、あるいはサーバーで一つだけ必要なデバッグするととま保護に対し自己の同僚と今後のプログラマー、という実際の試験となる。
が得られませんが、そのいのものを使用できる主張に加え、通常のエラー処理;現在私共もこのように:
Debug.Assert(i > 3, "i must be greater than 3 because of the flibbity widgit status");
if (i <= 3)
{
throw new ArgumentOutOfRangeException("i", "i must be > 3 because... i=" + i.ToString());
}
けんけんこんばんは獲得したデバッグ.主張を繰り返し、エラーの状態です。と思いんしばらく話されたデバッグ専用のダブルチェックの非常に重要な計算...
double interestAmount = loan.GetInterest();
Debug.Assert(debugInterestDoubleCheck(loan) == interestAmount, "Mismatch on interest calc");
...が得られませんのでパラメータ試験による確認(両方のデバッグおよびリリースを構築)...います。と思欠?
解決
主張しないためのパラメータのチェックしている。パラメータの確認を必ず行っております(正確にはどのよう事前に条件を指定した書類および/または仕様) ArgumentOutOfRangeException
捨てが必要です。
主張試験のための"ありえない状況であることをすること(プログラムロジック) 想 はtrueです。の主張があるのだが、これらの前提を破損するものとします。
武器agiは、dexで下がらないboxerぐ!
他のヒント
がコミュニケーションの側面を主張vs例外投.
ということかしてユーザがシェイクスピアの"マクベス"の名称性およびToStringメソッド.
場合、ToStringの実施のようになります:
public string ToString()
{
Debug.Assert(Name != null);
return Name;
}
という名前などがnullの場合があるバグのユーザークラスの場合です。
まToStringが実施すようになります:
public string ToString()
{
if ( Name == null )
{
throw new InvalidOperationException("Name is null");
}
return Name;
}
というのは、呼び出し側が利用ToString正しく名前がnullの場合はチェックされる前に呼びかける。
の実施の両方
public string ToString()
{
Debug.Assert(Name != null);
if ( Name == null )
{
throw new InvalidOperationException("Name is null");
}
return Name;
}
という名前がnullの場合が具のユーザーラックスしたいので取り扱います。(ユーザは必要ありませんチェックの名前です。) このような安全昔ながらのスタイル提案した.
っと思ったんこの長いハードを提供する場合に指導デバッグ対主張に関して試験する。
対応することができるでしょうテストクラスの誤入力に悪い状態で無効めの事業その他考えられるエラー条件と主張するべき ない 旅行です。各主張をチェックを行う 常に trueにかかわらず入力や計算を行います。
良いルールの親指うにな:
を主張しない代替のための強固なコードする機能を正しく独立した設定をします。彼らは、相互に補完的である。
主張すべきではないム中の単体テスト走行でも、搬送時には無効値または試験。このコードを処理する必要がありますこれらの条件はなく主張することができました。
場合を主張する旅行(単位で試験中又は試験)のクラスはbugged.
その他のすべての誤差--一般的に下環境ネットワーク接続に失われた)または誤用(呼び出し側に渡された場合、null値)での非常に良く、より理解できる用ハードチェック&例外をスローしました。例外が発生した場合、呼び出し側が知っている。場合には主張が発生すると、呼び出し側が知っているバグのコードを主張である。
に関する重複:私もそう思います。と思いますかょう複製の検証とデバッグ.を主張し、例外チェック。体にいい)"を追加-ノイズのコードおよび泥水のに関する者は過失が、その形を反復する
使っていを明確に確認する例外をスローに 公開 や 保護 方法と主張民間。
通常は、明示的なチェックガードの方法から見誤った値。でも、主張するにはチェック状態では不可能である。場合を主張は、かの欠陥があり、検証ロジックに含まれる一つのルーチンのクラスです。
例外の場合、できることが制限されて、飲み込むと、エラーには見えない。と思うDebug.を主張する.
すべきではありませんってキャッチハンドラを捕捉すべての例外が、いかがですることができるものとします。の場合コードが呼び出されますから、interop層漁すべての例外をCOMエラーコード、ついに見る独自のレンダリングメカニズム例外をスローしました。主張ならこれです。
また時に例外が独自のレンダリングメカニズムは、まだよく実践しい価値を生み出すミニダンプ一軒をVBであり、C#とはでご利用いただけます。例外のフィルターナミニダンプ時に例外が飛行うものであり、地域の例外扱います。 グレッグMiskellyのブログポスト例外のフィルタを挿入 に関する有用な情報が提供され、一方でこれからのc#.
他の注資産...いinteactしいユニットテストのエラー条件です。ることが有益であると思いますし、ラッパーをオフにして主張するための部試験までを実施。
IMOでの損失を開発いただけます。の適切な実施例外ですのでこういうことが起こった訳です。見た すぎ 応用表示"の主張に失敗した:i < 10"。い主張としてのソリューション私の意見のない主張のあるべきフィナンシャル-アドバイザーのプログラム。私の実践を使った主張が早い、汚れ確認をしています。最終版のコードは誤った状況を考慮し、行動します。場合にも起こさない2つの選択肢:手を離します。関数は例外がスローされた説明が間違ったパラメータに渡されます。思い当たらないポイントを重複の検証の論理です。
例の活用を主張する:
Debug.Assert(flibbles.count() < 1000000, "too many flibbles"); // indicate something is awry
log.warning("flibble count reached " + flibbles.count()); // log in production as early warning
と思っていることを主張するべき のみ 使用するときに知るきっかけになっ外 望ましい 制限も確認することができっと合理的に安心して続行します。すべてのその他の状況(気軽に出場しんのう)の使用例外なくどんどん大きくなっています。
キートレードオフというのはほとんどのダウンライブ/生産システム例外を避ける腐敗やトするかどうか、また状況は、絶対に許してはならない継続雑なテスト/デバッグバージョンが許可され続生産(ロギング警告のコースを受講した。
cf. http://c2.com/cgi/wiki?FailFast コピーし、変更からjavaの質問: 例外Vs主張
こちらは2つのセント.
ことになると思いるという方向の両方の主張および例外をスローしました。主な違いは二つの方法、まぁいる場合には、主張書き、簡単にアプリからテキストを定義す条件は属性...)が例外がスローされている被扶養者(tipically)による条件付きコードするのがより難しくなっているremove(multine部とプリプロセッサ条件分岐).
アプリケーション毎の例外の取扱いについて正しくな主張を満足することだけのアルゴリズム開発/テスト実施をしておりました。
場合は、nullオブジェクト参照としてのルーチンのパラメータとして利用するこ値を取得しまnullポインタ。実際:このような書き主張?この廃棄物の時間ます。その一方で、プライベートクラスのメンバーが使用するクラスルーチン?これらの値の設定かでは、サハクレアセダックの主張の場合はnull値が設定されます。これは当たり前のことでご利用の際は会員が、nullポインタが例外がわからない方の値を設定しました。この原因と再起動プログラムの破壊すべてのエントリポイント利用の個室ます。
例外は置することができまぁ)非常に重に管理する可能性があり使用すぎることができます。そのための追加的なチェックのなかには望ましくない最適なコードです。個人としての使用の例外を除けばコードが必要で深追制御(漁算の呼び出しスタック)する場合には、関数のパラメータはハードコードのコードです。