2011-09-03 5 views
7

私たちはDebugビルドを得た場合、本当にいるかどうかは問題ではありませんでしたことを信じるように使用:我々はそれを実行したデバッグのビルドがデバッグで実行され、デバッグなしで実行される場合は何が違うのですか?

  1. または、デバッグしました。

すべてが同じです。

最近、私は2つの異なる問題に遭遇しました。コードがちょうど実行されたときに何かが異なるか、またはコードのバージョンが同じであっても、デバッグされるときです。 (すなわちFluent NHibernate cannot load MySql.Data from GAC in debug mode of a testNpgsql - Specified method is not supported

私は.NET 4.0でこれら二つの間の違いは何であるか疑問に思って?何が違うかを理解することは、おそらく私が抱えている問題を解決するのに役立ちます。なぜなら、これらの異なるケースでバグの原因を探す場所を少なくとも知っているからです。私は単体テストをすべて緑色で実行するとわかりませんが、デバッグしようとするとさまざまな例外がスローされます。

答えて

4

アセンブリ解決の問題の武器はfuslogvw.exeです。アセンブリの検索場所と、アセンブリを見つける場所をCLRに知らせるための設定が表示されます。

問題が発生しているアセンブリの種類の2次障害モードがあります。これらのdbaseプロバイダは、多くの場合、アンマネージDLLに依存してジョブを完了させるラッパーです。 WindowsはこれらのDLLを検出できる必要があります。これは、PATH上のディレクトリにコピーされたり、メインEXEと同じフォルダにコピーされたりしないと失敗する傾向があります。これらのラッパーの展開手順を注意深く読んでください。

+0

これは何が起こっているのか、おかげです。しかし、あなたは "二次的な失敗モード"とは何かを精緻化することができますか? "プライマリ?失敗モード"(それが存在するならば)私はあなたのこれを言うあなたの方法か私の状況にいくつかの一般的な名前です。 –

+0

プライマリ=最初の可能性のある問題:不良設定、fuslogvw.exeが表示する種類。 Secondary =次の可能性のある問題:DLL Hell。 –

1

コードのタイミングをデバッグするときは、内部関数が長すぎます。したがって、コードが時間に敏感な場合は、奇妙なエラーに遭遇する可能性があります。それは私が考えることができるすべてについてです。

+0

私も経験したことは、これに関係なく明確に接続されていて、違いははるかに大きいです(質問に従うならば)。 –

+0

これは本当ですが、NHibernate時間に敏感なコードがたくさんあります。 – Phil

+0

両方の問題が流暢なnhbに接続されているかどうかわかりません。npgsql関連のものがほとんどです..なぜなら、両方とも異なる理由で失敗する可能性があるため、npgsqlはGACとは何の関係もありません。が失敗した –

-1

注意が必要な問題がいくつかあります。

1)codeninjaによると、コードを壊すと操作の順序が異なる場合があります。

2)ファイルが異なる場所にある可能性があり、パスが異なる方法で解決される可能性があります。これは、動的にリソースをロードした場合、またはDLLをビルドしてプラグインのディレクトリにコピーした場合に非常に重要です。デバッグ中に誤って間違ったものを読み込むことがあります。

3)デバッガで変数を観察すると評価が発生することがあります。バッキングフィールドを愚かに増やして、増分した値を返したプロパティを想像してください。

+0

1)いいえ、あなたがアプリケーションをデバッグすることを知っていれば、デバッグ時にほかのすべてのスレッドを破壊するので、1つのスレッドだけがデバッグされます。実行中のアプリケーションにアクセスした後にソース行にブレークインを入れると、これは同じ操作または同じ操作になります。 –

+0

2)いいえ、ちょうどデバッグオプションを回してデバッグ中の正確なソースマッチを見つけます。 –

+0

3)いいえ、副作用を排除して、プリプロセスと変数の評価をオフにしてください。 –

1

違いは、デバッガが接続されていると、例外がスローされたときにデバッガがスローされたときに停止することがあります。

[ツール/オプション/デバッグ]で[例外がAppDomainまたは管理/ネイティブの境界(管理のみ)を超えたときに切断する]と[デバッグ/例外]のオプションによって、デバッガがスローされたときにブレークします。

+0

残念なことに、その設定は私のマシンではすでにオフになっています。おそらく既定の値が設定されているので、これを設定することは覚えていません。 –

+0

Debug/Exceptions ...の下に何かチェックがありますか?また、Tools/Options/DebuggingでJust My Codeをチェックしていますか? – plodoc

+0

実際に私は共通言語ランタイム例外(2つのチェックボックス)を持っていましたが、私はそれらのチェックを外しました。問題は消えてしまったようです。何故ですか?私はfuslogvwのアプローチよりもこれが好きです。私は例外をスローすることを理解していますが、その後にテストが失敗する理由を理解できません。例外がスローされていると推測されますが、それを壊すわけではないので、 –

関連する問題