.NET Profiler не вызывает функции перехватывает функции входа / выхода
Я хочу использовать профилировщик.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 не вызываются (я пытался вывести сообщение в обратном вызове).
Что мне не хватает? Есть ли что-то еще, кроме регистрации хуков функции входа / выхода? Или я делаю неправильные предположения о хуках функции ввода / вывода?
1 ответ
Я только что прочитал, что есть дополнительные флаги, которые вы можете установить, чтобы указать, какие события вас интересуют. Один из них является COR_PRF_MONITOR_ENTERLEAVE
который делает именно то, что я искал. Спасибо резиновая утка.