2

.vsix Visual Studio 拡張機能に EnvDTE を使用して、ローカルおよびデバッグ ウィンドウで使用されるデバッグ データをキャプチャすることは可能ですか? それとも別の方法で可能ですか?

パワー ユーザー用の元の [ローカル] ウィンドウを犠牲にすることなく、より重いコンテンツを好きなように表示するように変更できるカスタム [ローカル] ウィンドウを作成したいと考えています。理想的な解決策は、ローカル ウィンドウに送信されるデータを取得して、独自のツリーを構築できるようにすることです。

4

1 に答える 1

10

これは実際には非常に簡単であることがわかりました。

DTE dte = (DTE).Package.GetGlobalService(typeof(DTE));
if(dte.Debugger.CurrentStackFrame != null) // Ensure that debugger is running
{
    EnvDTE.Expressions locals = dte.Debugger.CurrentStackFrame.Locals;
    foreach(EnvDTE.Expression local in locals)
    {
        EnvDTE.Expressions members = expression.DataMembers;
        // Do this section recursively, looking down in each expression for 
        // the next set of data members. This will build the tree.
        // DataMembers is never null, instead just iterating over a 0-length list.
    }
}

各式には次が含まれます。

  • 名前(文字列)
  • (ローカル ウィンドウに表示される文字列値)
  • タイプ(タイプの文字列名)
  • (型は親型)
  • DataMembers (その子の反復可能なコレクション (非 null))
  • IsValid (ブール値)

これが、似たようなことをしようとしている他の人に役立つことを願っています!

于 2013-01-22T22:48:41.530 に答える