2014-02-18 26 views
2

我想使用.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分析器的進入/離開函數掛鉤不會被調用(我試圖在回調中輸出消息)。

我錯過了什麼?除了註冊進入/離開功能鉤子還有更多的事情要做嗎?或者我對關於進入/離開函數鉤子做出錯誤的假設?

回答

1

我只是read,您可能會設置其他標誌來指定您感興趣的事件。其中之一是COR_PRF_MONITOR_ENTERLEAVE這正是我正在尋找。謝謝rubberduck