我想使用 .NET 分析器来跟踪应用程序的调用函数。我使用CLR Profiler作为模板,但没有更改分析器 (Project ProfilerOBJ
) 本身(GUID 除外)。当我尝试分析应用程序时,不会JITCompilationStarted
调用进入/离开函数挂钩(除了其他回调,如)。但也有一些被调用的回调(例如)(它告诉我分析器已在进程中加载)。Shutdown
我尝试以 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 探查器的进入/离开函数挂钩(我试图在回调中输出一条消息)。
我错过了什么?除了注册进入/离开功能挂钩之外,还有更多的事情要做吗?还是我对进入/离开功能挂钩做出了错误的假设?