我想使用.NET Profiler来跟踪应用程序的被调用函数。我使用CLR Profiler作为模板,但没有更改分析器(项目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分析器的进入/离开函数挂钩也没有被调用(我试图在回调中输出消息)。
我错过了什么?还有更多事情要做,而不是注册进入/离开功能钩子吗?或者我对进入/离开函数钩子做出了错误的假设?
答案 0 :(得分:1)
我只是read您可以设置其他标志来指定您感兴趣的事件。其中一个是COR_PRF_MONITOR_ENTERLEAVE
,它完全符合我的要求。谢谢rubberduck。