Отслеживание ETW во время выполнения NUnit
Я работаю над многопоточным приложением и знаю, что в моем приложении есть какая-то гонка / тупик, потому что время от времени один из моих модульных тестов застревает и никогда не завершается (сейчас я исправил это с помощью NUnit Атрибут времени ожидания). Я никогда не смогу повторить это при отладке теста.
В моем приложении уже закодирована трассировка ETW, что определенно поможет в устранении этой проблемы. Проблема в том, что для трассировки ETW приложение должно быть запущено PerfView или другим приложением, которое делит память с отслеживаемым приложением (насколько я знаю).
У меня вопрос: знает ли кто-нибудь способ запуска теста NUnit и нужно ли регистрировать события трассировки ETW в отдельном файле, который позже можно будет запустить через PerfView? Таким образом, всякий раз, когда я вижу, что мой тест не пройден, я могу посмотреть на трассировку этого прогона и проанализировать, что происходит. Как примечание стороны, я использую бегун NUnit Решарпера.
Любые другие подходы / методы приветствуются. Спасибо за ваш отзыв.
1 ответ
- Напишите простую реализацию, основанную на EventListener, которая собирает трассировки ETW для провайдеров, которых вы заинтересованы слушать.
- Скопируйте содержимое сохраненных трассировок в файл вручную или используйте некоторую библиотеку (например, вы можете просто сериализовать коллекцию журналов в строку JSON и записать ее в текстовый файл) или даже проверить сохраненные события как часть проверки теста.
- Обновите свои тесты, чтобы использовать этот слушатель.
В этом случае у вас может быть этот файл с событием созданных трассировок на компьютере контроллера сборки, где у вас может не быть прав / доступа для использования logman/PerfMon.