0

ウォッチ ウィンドウ タイプ機能 (式の評価とタイプの検査) が必要な Visual Studio 2005 用のアドイン (または必要に応じてパッケージ) の作成を検討しています。自動化機能が提供する Debugger::GetExpressionは十分に役立ちますが、提供される情報は少し粗雑です。

ドキュメントを見ると、 IDebugExpressionContext2より便利なように思えます。これらのいずれかを使用すると、式からより多くの情報を取得できるように見えます-すべてが文字列として渡されることなく、型やメンバーなどに関する詳細情報など。

ただし、実際に を取得する方法が見つかりませんIDebugExpressionContext2! 式のコンテキストを提供できるものに到達するまで、最初からゆっくりと掘り下げることができるというIDebugProgramProvider2点で、一種の関連性があるように見えますが、これにポートを提供する必要があり、対応するポートを取得する方法が明確ではありませんIDebugProgramProvider2::GetProviderProcessData現在のデバッグ セッション。(すべてのポートを試したとしても、どのポートが正しいかを判断する方法は明らかではありません...)

これは単にサポートされているユースケースではないのではないかと疑い始めていますが、運が良ければ、クラッシュするほど明白な何かを見逃しただけです.

誰でも助けることができますか?

4

2 に答える 2

1

を使用IDebugExpressionContextすると、最終的に のインスタンスを取得することになりますIDebugProperty。このインターフェースは、Expression Evaluator サービスによって実装されます。通常、これは言語固有のサービスです。式を評価する言語固有の詳細を抽象化するように設計されています。「評価」や検査などのはるかに高レベルのコマンドを理解します。

ただし、この方法ではどのような種類のオブジェクトも取得できないため、探しているものが得られるとは思いません。ほとんどすべての検査方法は、結果をString形式で返します。たとえば、型Int32ではなく文字列 "int" を取得します。これにより、型検査がほぼ不可能になります。

あなたがしようとしていることがサポートされているケースだとは思いません。評価中の型システムが現在のプロセスに存在しません。デバッグ対象プロセスに存在し、アクセスするのはかなり困難です。

于 2010-02-02T23:03:42.247 に答える
0

Debugger::GetExpressionメソッドを使用して評価した変数のタイプに関する詳細情報を取得するために実行できるハックがあります。

「AppDomain.CurrentDomain.GetAssemblies()」を評価して、すべてのアセンブリをデバッグ対象にロードし、それらをアドインにキャッシュすることができます。AppDomainにロードされている新しいアセンブリをリッスンする必要がある場合もあります。

次に、以下を実行します。

Expression myExpression = Debugger.GetExpression(...);
Expression typeRefExpression = Debugger.GetExpression("typeof(" + myExpression.Type + ").FullName"

TypeFullNameを取得したら、アセンブリキャッシュ内で一致するSystem.Typeを検索できます。取得したら、標準のReflectionAPIを使用して必要なものをすべて掘り下げることができます。

「typeof」キーワードがあるため、これはC#でのみ機能することに注意してください。たとえば、VB.Netには別のキーワードを使用する必要があります。

于 2010-05-31T08:10:23.723 に答える