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 Profiling API 博客:在 CLR V4 上运行 V2 分析器二进制文件

对于 CLR V4 运行时,您应该在事件日志(使用事件查看器查看)中看到一些有用的信息,这些信息描述了探查器加载失败的原因。

如果您不想使用COMPLUS_ProfAPI_ProfilerCompatibilitySetting博客中讨论的设置,您还可以支持该ICorProfilerCallback3接口以添加对 V4 运行时的支持。

使用 CLR V4,您可能还必须考虑并行方案,其中 V2 和 V4 运行时都加载到单个可执行文件中。有关更多信息,请参阅 David 的另一篇题为“Profilers、in-process side-by-side CLR instances 和免费测试工具”的帖子(遗憾的是,由于垃圾邮件预防,我也无法发布指向它的链接)。

于 2010-09-03T00:18:14.553 回答