Visual Studio Designer でエラーをデバッグする良い方法はありますか?
私たちのプロジェクトには、大量の UserControls と多くの複雑なフォームがあります。複雑なものの場合、デザイナーは多くの場合、あまり役に立たないさまざまな例外をスローします。何が問題なのかを理解する良い方法があるかどうか疑問に思っていました.
言語は C# で、Visual Studio 2005 を使用しています。
Visual Studio Designer でエラーをデバッグする良い方法はありますか?
私たちのプロジェクトには、大量の UserControls と多くの複雑なフォームがあります。複雑なものの場合、デザイナーは多くの場合、あまり役に立たないさまざまな例外をスローします。何が問題なのかを理解する良い方法があるかどうか疑問に思っていました.
言語は C# で、Visual Studio 2005 を使用しています。
VS の 2 番目のインスタンスを実行し、最初の VS インスタンスから「デバッグ -> プロセスにアタッチ」を実行して「devenv」を選択することで、コントロール デザイナーの問題をデバッグできました。
最初の VS インスタンスは、ブレークポイントを設定する場所です。2 番目のインスタンスを使用してデザイナーをロードし、「デザイナー」コードを実行します。
「デザインタイム コントロールのデバッグ(MSDN) 」を参照してください。
2005 年も 2015 年も苦痛でした。おそらく、アセンブリがシャドウ コピーされているか、デザイナー (?) による何かが原因で、ブレークポイントがヒットしないことがよくあります。できる最善の方法は、 への呼び出しを導入して手動で中断することですDebugger.Break()
。次のようにコンパイラ条件にラップできます。
#if DEBUG
System.Diagnostics.Debugger.Break();
#endif
int line_to = break; // <- if a simple breakpoint here does not suffice
私はこれを何度も経験しており、それは本当に苦痛です。
最初に、デザイナーが提供するスタック トレースをたどることをお勧めしますが、多くの場合、あまり役に立たない内部的なものを単にリストするだけであることがわかりました。
それでもうまくいかない場合は、コンパイルしてそこから例外を特定してみてください。あなたは本当に盲目的に飛んでいますが、これが問題です。次に、単純にコードを実行してみて、実行時に発生する例外を確認することができます。これにより、より多くの情報が得られるはずです。
最後の手段として、生成されていないコードをすべてフォームから削除し、徐々に再導入してエラーを特定することができます。
カスタム コントロールを使用している場合、以前の方法でもエラーが発生する場合は、カスタム コントロールに関連する生成コードを手動で削除できます。次に、同じ方法でこのステップバイステップを再導入して、問題の原因となっているカスタム コントロールを特定し、それを個別にデバッグします。
基本的に、私が知る限り、この問題を回避する方法は、少しゆっくりする以外にありません!
ブレークポイントがヒットしないことがある理由を発見しました。[プロセスにアタッチ] ダイアログで、[アタッチ先:] タイプを [選択...] にする必要があります。
「マネージド 4.0、4.5」に変更すると、WinRTアプリケーションのブレークポイントにヒットしました。出典: WinRT でのデザイナーのデバッグ。
それぞれに違いがあり、わかりにくい場合があります。最初のステップとして、次のことを行います。
VS の 2 番目のインスタンスを実行し、それを VS の最初のインスタンスにアタッチできます (Ctrl+Alt+P)。最初のインスタンスでブレークポイントを設定し、2 番目のインスタンスでデザイナーを実行すると、ブレークポイントが起動します。コードをステップ実行できますが、エディット コンティニュは機能しません。
エディット コンティニュを機能させるには、ライブラリのデバッグ オプションを制御して、コマンド ライン引数がソリューション ファイル名である VS を実行するように設定します。次に、ブレークポイントを設定して F5 キーを押すだけです。ユーザー コードと同じようにデバッグできます。補足として、これは VS および Office アドインでも実行できます。