私は何年も VS のデバッガーを使用してきましたが、今まで気付かなかった機能に出くわし、「くそっ! どうしてそれを見逃すことができた?こんなに便利だ!」と思うことがあります。
[免責事項: これらのヒントは、C# プロジェクトの VS 2005 で機能します。VS や他の言語の古いバージョンを保証するものではありません]
オブジェクト インスタンスを追跡する
特定のクラスの複数のインスタンスを操作しますか? どうすればそれらを区別できますか? ガベージ コレクション プログラミング以前の時代には、メモリ アドレスを確認するだけで、参照を追跡するのは簡単でした。.NET では、それはできません。オブジェクトが移動してしまう可能性があります。幸いなことに、watches ビューでは、watch を右クリックして [Make Object ID] を選択できます。
時計ビュー http://img403.imageshack.us/img403/461/52518188cq3.jpg
これにより、インスタンスの値の後に {1#}、{2#} などが追加され、インスタンスに一意のラベルが効果的に付与されます。次のようになります。
番号付きインスタンス http://img383.imageshack.us/img383/7351/11732685bl8.jpg
ラベルは、そのオブジェクトの存続期間中保持されます。
監視対象変数の意味のある値
デフォルトでは、監視対象の変数の値はその型です。そのフィールドを表示したい場合は、それを展開する必要があります。フィールドが多数ある場合や、フィールドが複雑な処理を行っている場合、これには長い時間がかかります (またはタイムアウトになることさえあります!)。
ただし、事前定義された型の中には、より意味のある情報を表示するものがあります。
- 文字列は実際の内容を示します
- リストと辞書は要素数などを表示します。
意味のある情報 http://img205.imageshack.us/img205/4808/37220487md1.jpg
自分のタイプにそれがあればいいと思いませんか?
うーん...
DebuggerDisplay
... .NET Reflector を使用した質の高い時間は、カスタム型の属性を使用してこれをいかに簡単に実現できるかを示しています。
[System.Diagnostics.DebuggerDisplay("Employee: '{Name}'")]
public class Employee {
public string Name { get { ... } }
...
}
... 再実行して...
タダ!http://img60.imageshack.us/img60/926/79816018ha1.jpg
ここには、この件に関するより多くの情報があります: MSDN
すべての例外で中断
…コードで扱うものも!私は生まれてからこれについて知らなかったので、私はとても無知ですが、とにかくここに行きます-多分これはいつか誰かを助けるでしょう
例外がスローされるたびに、デバッグされたプロセスを強制的にデバッグ モードにすることができます。何時間もバグを探し続けて、このようなコードに出くわしたことはありませんか?
try {
runStrangeContraption();
} catch(Exception ex) {
/* TODO: Will handle this error later */
}
これらの場合、すべての例外をキャッチすることは非常に便利です。これはDebug > Exceptions... (Ctrl-Alt-E)から有効にできます。必要な例外の種類ごとに、[スロー] 列のボックスにチェックを入れます。
それらは私にとって額を叩く瞬間でした。あなたのものを共有してもよろしいですか?