我为.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
蒂莫西
您讨论的问题可能包含在David Broman的帖子中: David Broman's CLR Profiling API Blog: Run your V2 profiler binary on CLR V4
对于CLR V4运行时,您应该在事件日志(使用事件查看器查看)中看到一些有用的信息,这些信息描述了探查器无法加载的原因。
如果您不想使用博客中讨论的COMPLUS_ProfAPI_ProfilerCompatibilitySetting
设置,您还可以支持ICorProfilerCallback3
界面以添加对V4运行时的支持。
使用CLR V4,您可能还需要考虑并行场景,其中V2和V4运行时都加载到单个可执行文件中。有关更多信息,请参阅David的另一篇题为“Profilers,进程内并行CLR实例和免费测试工具”的帖子(遗憾的是,由于垃圾邮件阻止,我也无法发布链接)。