Отслеживание ETW во время выполнения NUnit

Я работаю над многопоточным приложением и знаю, что в моем приложении есть какая-то гонка / тупик, потому что время от времени один из моих модульных тестов застревает и никогда не завершается (сейчас я исправил это с помощью NUnit Атрибут времени ожидания). Я никогда не смогу повторить это при отладке теста.

В моем приложении уже закодирована трассировка ETW, что определенно поможет в устранении этой проблемы. Проблема в том, что для трассировки ETW приложение должно быть запущено PerfView или другим приложением, которое делит память с отслеживаемым приложением (насколько я знаю).

У меня вопрос: знает ли кто-нибудь способ запуска теста NUnit и нужно ли регистрировать события трассировки ETW в отдельном файле, который позже можно будет запустить через PerfView? Таким образом, всякий раз, когда я вижу, что мой тест не пройден, я могу посмотреть на трассировку этого прогона и проанализировать, что происходит. Как примечание стороны, я использую бегун NUnit Решарпера.

Любые другие подходы / методы приветствуются. Спасибо за ваш отзыв.

1 ответ

  • Напишите простую реализацию, основанную на EventListener, которая собирает трассировки ETW для провайдеров, которых вы заинтересованы слушать.
  • Скопируйте содержимое сохраненных трассировок в файл вручную или используйте некоторую библиотеку (например, вы можете просто сериализовать коллекцию журналов в строку JSON и записать ее в текстовый файл) или даже проверить сохраненные события как часть проверки теста.
  • Обновите свои тесты, чтобы использовать этот слушатель.

В этом случае у вас может быть этот файл с событием созданных трассировок на компьютере контроллера сборки, где у вас может не быть прав / доступа для использования logman/PerfMon.

Другие вопросы по тегам