Самый простой способ написать сообщение журнала и отобразить в Perfview - PullRequest
0 голосов
/ 07 января 2019

Мне нужно написать сообщение журнала и записать его в PerfView . Я хотел бы избегать использования EventLog или EventSource, потому что они достаточно инвазивны: они требуют регистрации нового источника или провайдера ETW, который оставляет остатки в системе.

В идеале я просто хочу вызвать Debug.WriteLine (который использует OutputDebugString ), но, похоже, PerfView не может его собрать. Или есть какой-нибудь провайдер ETW, который видит отладочные сообщения?

Если у вас есть ответ, укажите две части решения:

  1. Что я должен написать на C #, и
  2. Как настроить PerfView для захвата (если есть поставщик ETW, просто назовите его).

1 Ответ

0 голосов
/ 09 января 2019

То, что вы хотите, это использовать EventSource . Здесь вам не нужно иметь дело с GUID и регистрацией в системе.

public sealed class MinimalEventSource : EventSource
{
    public class Tasks
    {
        public const EventTask Information = (EventTask)1;
    }

    public static MinimalEventSource Log = new MinimalEventSource();

    [Event(1, Message = "{0}", Opcode = EventOpcode.Info, Task = Tasks.Information)]
    public void Information(string message)
    {
        if (IsEnabled())
        {
            WriteEvent(1, message);
        }
    }
}

Lof данных с MinimalEventSource.Log.Information("my debug info"); и захватить их с perfview с PerfView /OnlyProviders=*MinimalEventSource. Важной вещью является *. Источник событий регистрирует манифест с определениями через ManifestEvent , который добавляется в ETL, поэтому регистрация манифеста не требуется.

...