Инициализация API .NET Profiling - PullRequest
1 голос
/ 02 мая 2019

Я пытаюсь научиться писать простой .net-профилировщик с использованием профилирования API.

Для первого шага я просто хочу иметь возможность загрузить dll-профилировщик и записать в файл журнала файл ICorProfilerCallback :: Initialize.

В тестовом консольном приложении .net я установил следующие переменные среды:

COR_ENABLE_PROFILING="1"

COR_PROFILER="ProfilerTest" -> Здесь я думаю, что проблема в этом. Я не знаю, как найти GUID, а ProfilerTest - это имя моей dll. Здесь говорит, что начиная с .NET Framework 4 профилировщики не должны регистрироваться. Означает ли это, что эту переменную среды устанавливать не нужно?

В исходном коде CLRProfiler от Microsoft они также устанавливают COR_PROFILER_PATH.

Для полноты здесь приведена функция инициализации из dll:

HRESULT STDMETHODCALLTYPE Profiler::Initialize(IUnknown* pICorProfilerInfoUnk)
{
    // A macro that writes to a log file.
    LOG(INFO);
    auto queryInterfaceResult = pICorProfilerInfoUnk->QueryInterface(__uuidof(ICorProfilerInfo), reinterpret_cast<void **>(&this->corProfilerInfo));

    if (FAILED(queryInterfaceResult))
        return E_FAIL;

    DWORD eventMask = COR_PRF_ALL;

    auto hr = this->corProfilerInfo->SetEventMask(eventMask);

    if (hr != S_OK)
        printf("ERROR: Profiler SetEventMask failed (HRESULT: %d)", hr);

    printf("ERROR: Profiler SetEventMask failed (HRESULT: %d)", hr);
    LOG(INFO);

    return S_OK;
}
...