我想使用.NET分析器来跟踪应用程序的被调用函数。我用CLR Profiler作为模板,但没有更改探查器(项目ProfilerOBJ
)本身(除了GUID)。当我尝试分析一个应用程序时,输入/离开函数挂钩(除了其他回调,如JITCompilationStarted
)是而不是调用。但也有一些回调被称为(例如Shutdown
)(它告诉我,该过程中加载了分析器)。.NET Profiler进入/离开函数挂钩不叫
我试着在32位和64位运行进程(64位的函数钩子似乎在某处定义),但没有成功。
测试应用程序,我异型如下:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Press Enter to allocate object");
Console.ReadLine();
var obj = new Person();
Console.WriteLine("Press Enter to call method on allocated object");
Console.ReadLine();
obj.Walk();
Console.WriteLine("Press Enter to exit");
Console.ReadLine();
}
}
class Person
{
private int walked = 0;
public void Walk()
{
this.walked++;
}
}
我预计至少回调ICorProfilerCallback::ObjectAllocated
和进入/离开挂钩函数被调用。但唯一的回调是ICorProfilerCallback::Shutdown
。
看来,即使原来的CLR分析器的进入/离开函数挂钩不会被调用(我试图在回调中输出消息)。
我错过了什么?除了注册进入/离开功能钩子还有更多的事情要做吗?或者我对关于进入/离开函数钩子做出错误的假设?