2

我想使用 .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 探查器的进入/离开函数挂钩(我试图在回调中输出一条消息)。

我错过了什么?除了注册进入/离开功能挂钩之外,还有更多的事情要做吗?还是我对进入/离开功能挂钩做出了错误的假设?

4

1 回答 1

1

我刚刚读到您可以设置其他标志来指定您感兴趣的事件。其中之一就是COR_PRF_MONITOR_ENTERLEAVE它完全符合我的要求。谢谢橡皮鸭

于 2014-02-18T08:17:15.137 回答