【发布时间】:2013-02-26 13:31:40
【问题描述】:
每当单元测试由于StackOverflowException 而失败时,单元测试进程会立即退出 - 找出发生了什么(我知道)的唯一方法是调试通过以下获得的单元测试进程的崩溃转储此处找到的步骤
获取在抛出StackOverflowException 时正在运行的单元测试的名称的最简单方法是什么?即使在调试单元测试时,我也很难找到当前单元测试的名称,因为它位于堆栈的底部,并且 Visual Studio 不会在调试窗口中显示整个堆栈,因为它太大了。
有没有什么方法可以在不收集和调试故障转储的情况下找出哪个单元测试失败?
【问题讨论】:
-
我不确定是什么截断了异常。您可以尝试在监视和/或中间窗口中使用
new System.Diagnostics.StackTrace(true)创建自己的堆栈跟踪吗?也许这将为您提供完整的跟踪。 -
@Caramiriel 运行时,交互式调试会提供
Cannot evaluate expression because the current thread is in a stack overflow state.,但在调试故障转储时,您无法运行即时表达式,因为此时进程实际上并未运行。没有显示整个堆栈跟踪,因为它很大。 -
@Justin:如果您的 Visual Studio 架构(例如 x86)与您的应用程序相匹配,那么您还可以通过在即时窗口中键入
!clrstack来加载 SOS 并转储堆栈跟踪。似乎为我工作。 (0028ed6c 00340147 ConsoleApplication45.Program.Rec() 0028edac 003400fb ConsoleApplication45.Program.Main(System.String[])) -
您的单元测试流程/线束/工具是什么?您应该获得进度日志(可能是控制台输出?),因此即使工具无法正常处理
StackOverflowException,您也应该能够在日志中看到正在运行的测试方法的名称最后。
标签: c# .net unit-testing stack-overflow