我想使用.NET探查器来跟踪应用程序的调用函数。我使用CLR探查器作为模板,但没有更改探查器(ProjectProfilerOBJ
)本身(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探查器的回车/回车函数挂钩也没有被调用(我试图在回调中输出一条消息)。
我错过了什么?除了注册进入/离开函数挂钩之外,还有更多的事情要做吗?还是我对进入/离开函数挂钩做了错误的假设?
我刚刚读到,您可以设置其他标志来指定感兴趣的事件。其中之一是COR_PRF_MONITOR_ENTERLEAVE
,它正是我想要的。谢谢橡皮鸭。