我的问题/问题是什么? 我正在尝试使用 WinDBG 附加到我的一些单元测试,这些单元测试位于类库(单元测试项目)中,但我无法让 WinDbg 中断托管异常。
我为什么要这样做? 目前我有使用 shims 的测试并且遇到了这个问题: UnitTestIsolationException: Throws Exception while running Shims test in Release/Debug mode
但是,只有当这些测试与其他一些不使用填充程序的测试一起运行时(测试资源管理器中的相同播放列表)才会发生这种情况。单独运行时,测试通过。
所以,我想我会启动 WinDbg(我对它的了解非常有限),附加到测试运行器,然后打破那里的异常。
我试过的: 因为这是一个 DLL,它显然是由一些可执行文件加载的,以运行测试中的代码(测试运行程序)。虽然我最初只是在 Visual Studio 中运行这些测试,但我也无法确定附加 WinDbg 的进程,因此我开始使用 vstest.console.exe 开始运行测试,然后附加到该进程。
我可以很好地附加,WinDbg 会停止执行测试运行程序(耶!)。
现在,我想在抛出 CLR 异常后立即中断(即我的 UnitTestIsolationException)。谷歌搜索后,我发现了 windbg 命令: sxe clr
然后我输入g
,程序再次开始运行我的测试。
我看到的行为: WinDbg 永远不会在 UnitTestIsolationException 上中断 - 所有测试运行完成,测试结果打印到控制台,然后程序终止:
Passed [SomePassingTestName]
Passed [SomePassingTestName]
Failed [TheFailedTestMethodName]
Error Message:
Test method [TheFaileTestMethodName] threw exception:
Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationExceptio
n: Unexpected error returned by SetDetourProvider in profiler library 'C:\Progra
m Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsof
t\IntelliTrace\14.0.0\Microsoft.IntelliTrace.Profiler.14.0.0.dll'.