我想使用.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分析器的進入/離開函數掛鉤不會被調用(我試圖在回調中輸出消息)。
我錯過了什麼?除了註冊進入/離開功能鉤子還有更多的事情要做嗎?或者我對關於進入/離開函數鉤子做出錯誤的假設?