在NUnit运行期间跟踪ETW

时间:2015-03-19 17:56:40

标签: c# multithreading nunit resharper etw

我正在研究一个多线程应用程序,我知道我的应用程序中存在某种竞争条件/死锁,因为每隔一段时间,我的一个单元测试就会卡住并且永远不会完成(现在我已经解决了这个问题)使用NUnit Timeout属性)。在调试测试时,我永远无法复制这个。

我已将ETW跟踪编码到我的应用程序中,这肯定有助于调试此问题。问题是要进行ETW跟踪,应用程序必须由PerfView或其他与跟踪应用程序共享内存的应用程序启动(据我所知)。

我的问题是:有没有人知道运行NUnit测试的方法,并将ETW跟踪事件记录在一个可以在以后通过PerfView运行的单独文件中?这样,每当我看到我的测试失败时,我都可以查看该运行中的跟踪并分析以查看发生了什么。作为旁注,我正在使用Resharper的NUnit跑步者。

欢迎任何其他方法/技术。感谢您的反馈。

1 个答案:

答案 0 :(得分:1)

  • 编写一个源自的简单实现 EventListener那个 为您有兴趣倾听的提供商收集ETW跟踪。
  • 转储 手动存储跟踪到文件的内容或使用某些库(例如,您可以将日志集合序列化为JSON字符串并将其写入文本文件),甚至可以将存储的事件验证为测试验证的一部分。
  • 更新您的测试以使用该侦听器。

在这种情况下,您可以在构建控制器计算机上创建具有跟踪创建事件的文件,您可能没有权限/访问权限使用logman / PerfMon。