問題タブ [imetadataimport]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - プロファイリングAPI(ICofProfilerInfoまたは任意のIMetadataImportまたはその他の方法)によるSystem.Threading.Thread.ThreadStateの読み取り方法
プロファイリングAPIICofProfilerInfoまたはIMetadataImportインターフェイス、あるいはアンマネージコードから他の方法でマネージスレッドのSystem.Thread.ThreadStateプロパティを読み取る方法はありますか?
たとえば、次のようなものです。
c# - IMetaDataImport::ResolveTypeRefメソッドの問題
インターフェイスを使用する.NETアプリ用の独自のデバッガーがありますIMetaDataImport
メソッドを呼び出すとResolveTypeRef
、常に。を取得しNotImplementedException
ます。
の定義ResolveTypeRef
は次のようになります。
メソッドの呼び出し:
通常、メソッドはタイプSystem.ExceptionまたはSystem.SystemExceptionを解決する必要があります。
この問題は、アプリを.NET3.5から.NET4に移動したときに発生しました。
答えてくれてありがとう!
c# - IMetaDataImport2::EnumGenericParamsメソッドが機能しない
IMetaDataImportで1つの問題を解決した後、私はかなり長い間別の問題に取り組んでいます。EnumGenericParamsメソッドを使用します。
このメソッドはAccessViolationExpcetionをスローしますが、これはたまにしか発生しません。その他の場合、メソッドは問題なく呼び出しから戻りますが、そのパラメーターは、expcetionをスローするときのパラメーターと同じです。たまにしか理由がわかりません。
また、AccessViolationExpcetionはcatchステートメントでキャッチできません。VS 2010でデバッグする場合、例外TargetInvocationExceptionは、AccessViolationExpcetionに設定されたInnerExceptionで最初にキャッチされます。
IMetaDataImport2およびEnumGenericParamsの定義:
メソッドの呼び出し:
(3番目のパラメーターがnullではなく、4番目のパラメーターが0より大きい場合でも、例外が発生します。)
この問題は、アプリを.NET3.5から.NET4に移動したときに発生しました。
助けてくれてありがとう!
c# - IMetaDataImport EnumMethods を使用して基本クラスの階層メソッドを取得する
MDBG サンプルを見てマネージド デバッガーを実装しようとしています。
MDBG は、指定されたスコープ内で関数名を解決できますが、基本クラスを考慮していません。
MDBG はこれを行っています:
Type.GetMethods() はオーバーライドされ、この実装があり、IMetaDataImport.EnumMethods を使用します。
問題は、m_importer.EnumMethods()が指定された型のメソッドを表す MethodDef トークンを列挙することですが、クラス階層のすべてのメソッドに興味があります。
クラス階層で定義されているすべてのメソッドを取得するにはどうすればよいですか? (もちろん、リフレクションなどの一般的な方法は使用できません。他のプロセスで定義された型を分析しているためです)
相互運用性と深い CLR/CIL 構造に関する私の限られた知識は、ここに進む正しい方法を見つけるための障害を生み出します。
アドバイス/提案は大歓迎です!
よろしく、
c# - ICorDebugEval を使用したジェネリック型 func-eval
MDBG サンプルを使用してマネージド .NET デバッガーを作成しています。
MDBG は、私が追加しようとしているプロパティ ゲッターの評価をサポートしていません。次のクラス構造を検討してください。
ある時点で、A のインスタンスを作成し、ブレークポイントで停止してその状態を評価しています。
デバッガーのウォッチ ウィンドウで、「this.SomeProp」を導入します。これは、このオブジェクトで get_SomeProp メソッドの関数評価を実行し、特定のケースに対して null 値を返す必要があります。
私が遭遇した最初の問題は、get_SomeProp が基本クラスで定義されていたため、関数を見つけるためにクラス階層内のすべての TypeDefs/TypeRefs/TypeSpecs を実行する必要があったという事実でした。
しかし、それが見つかった後、
結果: TypeLoadException: ジェネリック型が、アセンブリで間違った数のジェネリック引数と共に使用されました。
非ジェネリック関数がジェネリック クラス (ベース) で定義されているために発生することに気付いたので、それを評価するときは、クラスのジェネリック パラメータも示す必要があります。
これは、
問題は、評価したい関数とそれを評価したいインスタンスだけを持って、クラスジェネリックパラメータの型を抽出する方法がわからないことです。
ここに私が現在使用しているいくつかのコードがあります:
どんな提案/アドバイスも大歓迎です!
よろしく、
解決
@Brian Reichleの優れた回答のおかげで、私はこの解決策を思いつきました:
そして関数自体:
c# - ポリモーフィック クラスの機能評価
MDBG サンプルを使用してマネージド .NET デバッガーを作成しています。
MDBG サンプルは、指定されたインスタンスの最上位クラスでのみ動作し、クラス階層の奥深くを検索しません。階層を調べて、利用可能なすべてのメソッドを取得できました。しかし、そのような場合に問題が発生します。
問題は、castedToBase を ICorDebugValue として取得し、その ICorDebugValue2::GetExactType を照会するときに、Base クラスではなく A クラスを取得することです。その時点で、get_SomeProp を呼び出すメソッドを区別できなくなりました。ICorDebugValue2::GetExactType は、実行されたキャストを考慮し、基になる型を常に返すとは限りません。
どのメソッドを呼び出す必要があるかを理解するにはどうすればよいですか?
私が今やっているコードの一部を以下に示します。mdbgValueは castedToBase オブジェクトを表します。szTypedef は、予期される "Base" ではなく "A" を返します。