2008-09-02 12 views
36

Visual Studio Designerでエラーをデバッグする良い方法はありますか?Visual Studio Designerのエラーをデバッグするには良い方法

私たちのプロジェクトでは、たくさんのUserControlと多くの複雑なフォームがあります。複雑なものについては、多くの場合役に立たないさまざまな例外がスローされることがよくあります。何が間違っているのかを知るには良い方法があるのでしょうか?

言語は、C#で、私たちは一つ一つが異なっており、彼らは時々不明瞭なことができるのVisual Studio 2005

答えて

6

Debugging Design-Time Controls(MSDN)を参照してください。

+1

すばらしいおかげで偽! 特に「役立つデバッグセッションの開始」セクションでした。 –

0

を使用しています。最初のステップとして、私は次のようにします:

  • ソースコントロールを使用して、頻繁に保存してください。デザイナーのエラーが発生した場合は、最近発生した影響を受けたコントロールのすべての変更のリストを取得し、原因を見つけるまでそれぞれをテストしてください。
  • 関連するコントロールの初期化ルーチンを必ずチェックしてください。多くの場合、これらのエラーは、コントロールのデフォルトコンストラクタ(VS内でのみ発生する可能性のあるエラー)によって呼び出されるエラーまたは悪い依存関係のために発生します。
1

これは何度も起こりました。本当の痛み。

まず、デザイナーが提供するスタックトレースに従うようにしてみることをお勧めしますが、あまり使われていないたくさんの内部構造物を単にリストしていることがよくあります。

これが機能しない場合は、そこから例外をコンパイルして判断してください。あなたは本当に問題視されているブラインドです。単純にコードを実行して、実行時に発生する例外を確認すると、より多くの情報が得られます。

フォームから非生成コードをすべて削除し、徐々に再導入してエラーを特定することができます。

カスタムコントロールを使用している場合は、カスタムコントロールに関連して生成されたコードを手動で削除することもできます。ただし、これまでの方法でもエラーが発生する場合があります。この手順を同じ方法で再導入して、どのカスタムコントロールが問題を引き起こしているのかを判断し、それを別々にデバッグしてデバッグすることができます。

基本的には、問題を回避する以外の方法はありません。

38

私は、VSの2番目のインスタンスを実行し、最初のVSインスタンスから「デバッグ - >プロセスにアタッチ」し、「devenv」を選択して、いくつかのコントロールデザイナの問題をデバッグできました。

最初のVSインスタンスでは、ブレークポイントを設定します。 2番目のインスタンスを使用してデザイナをロードし、 "デザイナ"コードを実行させます。

+0

... – serhio

+0

どのような簡単な解決策!それを愛し、私を大きく助けました。 – Mohgeroth

+0

**デザイナーコードを実行させるために2番目のインスタンスを使用する理由** 'InitializeComponent()'メソッドの ''属性をコメントアウトしていないのはなぜですか? –

0

VSの2番目のインスタンスを実行してVSの最初のインスタンスに追加できます(Ctrl + Alt + P)。最初のインスタンスでブレークポイントを設定し、2番目のインスタンスでデザイナを実行すると、ブレークポイントが起動します。コードをステップ実行することはできますが、編集と継続は機能しません。

Edit-and-Continueを機能させるには、コマンドライン引数をソリューションファイル名にしてVSを実行するようにライブラリのデバッグオプションを制御します。次に、ブレークポイントを設定してF5を押すだけです。それはユーザーコードのようにデバッグされます!副次的なこととして、これはVSとOfficeのアドインも行うことができます。

+0

"が2番目のインスタンスでデザイナーを実行し、ブレークポイントが" ...発火しません... – serhio

1

ブレークポイントにヒットしないことがある理由を発見しました。 プロセスへのアタッチダイアログでは、 "Attach to:"タイプは "Select ..."でなければなりません。

"Managed 4.0、4.5"に変更すると、WinRTアプリケーションのブレークポイントがヒットしました。出典:Designer Debugging in WinRT

2

これは2005年の痛みで、まだ2015年です。ブレークポイントは、おそらくアセンブリがシャドウコピーされているか、デザイナー(?)が何らかの理由でヒットしていないことがよくあります。あなたができることは、Debugger.Break()への呼び出しを手動で打つことです。あなたは条件付きコンパイラにそれを包むかもしれません:

#if DEBUG 
    System.Diagnostics.Debugger.Break(); 
#endif 
int line_to = break; // <- if a simple breakpoint here does not suffice 
+0

しかし、それは2016年には良いですか? ; ^) – Mogsdad

+0

もちろん! :) ... –

+0

しかし、それは2017年に良いですか?粗いのではない...まだバグと迷惑とそれを解決するための簡単な方法はありません。複数のマイクロソフトリソースが、実際には、これらのエラーが起こっていることが「設計上」であると言いました。それは、マイクロソフトが問題として認識することを拒否しているのが最も厄介なことです。 –

関連する問題