3

.NET アプリケーション用の小さなプロファイラーを作成しました。インターフェースを使用していICorProfilerCallback2ます。

プロファイラーは、.NET 2.0 アプリケーションにアタッチして適切に機能しますが、.NET >2.0 (3.0、3.5、4.0) では機能しません。.NET 4.0 でコンパイルされた exe を起動しても何も起こりませんが、.NET 2.0 ではプロファイラーが起動します。マネージドexeを実行する前に、次の変数を設定しています

@Echo off
set Cor_Enable_Profiling=0x1
set COR_PROFILER={67D8965A-8686-2639-9C24-E1F7D13EE105}
set COR_PROFILER_DLL=e:\Debug\Profiler.dll
set COR_PROFILER_PATH=e:\Debug\Profiler.dll

なぜこれが起こるのでしょうか?それも入らないDllMain

4

1 に答える 1

5

ティモテ、

あなたが議論する問題は、David Bromanの投稿でカバーされている可能性があります:
David BromanのCLRプロファイリングAPIブログ:CLRV4でV2プロファイラーバイナリを実行します

CLR V4ランタイムの場合、プロファイラーのロードに失敗した理由を説明するいくつかの有用な情報がイベントログ(イベントビューアーで表示)に表示されます。

COMPLUS_ProfAPI_ProfilerCompatibilitySettingブログで説明されている設定を使用したくない場合はICorProfilerCallback3、V4ランタイムのサポートを追加するためのインターフェイスをサポートすることもできます。

CLR V4では、V2ランタイムとV4ランタイムの両方が単一の実行可能ファイルにロードされるサイドバイサイドシナリオも検討する必要がある場合があります。詳細については、「プロファイラー、インプロセスのサイドバイサイドCLRインスタンス、および無料のテストハーネス」というタイトルのDavidの他の投稿を参照してください(残念ながら、スパム防止のためにリンクを投稿することはできません)。

于 2010-09-03T00:18:14.553 に答える