2009-09-15 7 views
0

私は現在の私の会社の比較的新しい従業員なので、私はまだソフトウェアの周りを勉強するという点で「消防ホースから飲む」建築。ユニットテストを書いている間に、いくつかの非常に大きなオブジェクトを扱っていることが分かりました。ディスカッションのために「SavedOrder」と言うと、私が探している特定のデータを見つける場所を見つける必要があります。.NETのJITデバッガ内のオブジェクトのメンバーを「検索」

私が気づいている問題は、各SavedOrderが継承とメンバー(メンバーを持っているメンバー、メンバーがいるなど)、データの一部を探しています。

今のところ私は探しているものを見つけ出すために、自分の腕時計を広げてオブジェクトにマウスをかけています。誰かが、このオブジェクトが "タイプA"または値 "SomeEnum.SomeValue"の何かを持っているかどうかを見つけるために使用するプラグイン/テクニックを知っていますか?

編集:すべての良い入力は、私の目標を完全に解決するものはまだありません。オブジェクトブラウザー(オブジェクトブラウザーとリフレクター)は各オブジェクトのメンバーをブラウズするのにはうまく機能しますが、ポイントAをポイントDにリンクするという目的で、ポイントAをポイントBまたはDにCに移動するだけです。

私は最善の解決策は次のようになり記述するう擬似C#再帰アルゴリズムを推測:多分、ことはできません知っている

WheresWaldo FindMember(Object o) 
{ 
    foreach(PublicMember member in o) 
    { 
     if(o.IsType(MyType)) 
      return Success!; 
     else 
      return WheresWaldo(member); 
    } 


} 

答えて

3

私はあなたに完全に従っているかどうかはわかりませんが、おそらく条件付きブレークポイントを使用できます。関連するコードにブレークポイントを設定し、右クリックして条件ブレークポイントを選択します。ここから、ブレークポイントが評価されるたびに評価されるコードを書くことができます。そうすれば、条件が満たされたときにのみ停止するように指定できます。

編集:あなたのコメントに基づいて、私はリフレクターが役に立つかもしれないと言います。特定のタイプまたはメンバーを検索するオプションがあります。リフレクターを関連するアセンブリと共に起動します。検索のためにF3を押し、メンバーのためにCtrl-Mを選択し、探しているメンバーの名前を入力します。正確な一致をオン/オフに切り替えると、検索に役立ちます。

+0

私が望むものを記述することは困難でした。明確にするために、私の目標は注文の保証期間を見つけることでしたが、その保証はSavedOrder.Header.ProductSupport.WarrantyLengthにありましたが、それがどこにあったのかわかりませんでした(そしてより多くの灰色のオブジェクト名で対処する必要があります)。どのようにそのフィールドがどこにあるのか調べるにはどうすればいいですか? –

+0

特定のインスタンスのWarrantyLengthの値を調べたいのですが、このプロパティを持つタイプがわからないのですか? –

+0

私はどこにいるのか分かりません:)。 私が見せようとしたのは、SavedOrderにHeaderがあり、WarrantyLengthプロパティを持つProductSupportがあるという点でプロパティが「4深い」ということでした。私は直感的には、保証はSavedOrderのどこかにあると知っていますが、それを見つけるために何百ものプロパティをナビゲートする方法はわかりません。 –

1

ObjectBrowserおそらく使用したいものです。それを使ってプロパティを検索することができます。

+0

ほとんど、私はそれを使いましたが、それを忘れました。唯一の欠点は、タイプSavedOrderをブラウズできることで、継承され所有されているメンバーはすべて表示されますが、メンバーのメンバーは表示されないことです(つまり、ProductSupportはヘッダーを参照せずにヘッダーのメンバーです)。したがって、WarrantyInfoは依然として見つけにくいでしょう。 –

関連する問題