我为.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
答案 0 :(得分:5)
蒂莫泰伊,
您讨论的问题可能包含在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实例,以及免费测试工具' (遗憾的是,由于垃圾邮件预防,我无法发布链接)。