Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# vstest在运行某些特定测试时崩溃_C#_Testing_Visual Studio 2015_Vstest - Fatal编程技术网

C# vstest在运行某些特定测试时崩溃

C# vstest在运行某些特定测试时崩溃,c#,testing,visual-studio-2015,vstest,C#,Testing,Visual Studio 2015,Vstest,当我让我的解决方案运行所有测试(约800个测试)时,一段时间后,一个带有错误的弹出窗口显示vstest.executionengine.x86.exe已停止工作 我得到的一些问题细节示例如下: Problem signature: Problem Event Name: CLR20r3 Problem Signature 01: vstest.executionengine.x86.exe Problem Signature 02: 14.0.23107.0 Problem

当我让我的解决方案运行所有测试(约800个测试)时,一段时间后,一个带有错误的弹出窗口显示vstest.executionengine.x86.exe已停止工作

我得到的一些问题细节示例如下:

Problem signature:
  Problem Event Name:   CLR20r3
  Problem Signature 01: vstest.executionengine.x86.exe
  Problem Signature 02: 14.0.23107.0
  Problem Signature 03: 559b7b6c
  Problem Signature 04: mscorlib
  Problem Signature 05: 4.6.1076.0
  Problem Signature 06: 56d79fa2
  Problem Signature 07: 0
  Problem Signature 08: ffffffff
  Problem Signature 09: System.StackOverflowException
  OS Version:   6.1.7601.2.1.0.256.48
  Locale ID:    1051
  Additional Information 1: 5cd2
  Additional Information 2: 5cd2742c12da7dd4b1d5bf900186a452
  Additional Information 3: 2fe2
  Additional Information 4: 2fe276cacf1c00cd7a2aed7b27f5a5f9

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: vstest.executionengine.x86.exe
  Application Version:  14.0.23107.0
  Application Timestamp:    559b7b6c
  Fault Module Name:    clr.dll
  Fault Module Version: 4.6.1076.0
  Fault Module Timestamp:   56d7a0ff
  Exception Code:   c00000fd
  Exception Offset: 00003567
  OS Version:   6.1.7601.2.1.0.256.48
  Locale ID:    1051
  Additional Information 1: 0127
  Additional Information 2: 01273c850b3b6fc6378d3f666887788e
  Additional Information 3: 0786
  Additional Information 4: 07866ddaac895bff9a7fa791fcdaa4a7
在VS输出窗口中,我得到:

------ Run test started ------
The active Test Run was aborted because the execution process exited unexpectedly. To investigate further, enable local crash dumps either at the machine level or for process vstest.executionengine.x86.exe. Go to more details: http://go.microsoft.com/fwlink/?linkid=232477
========== Run test finished: 0 run (0:03:55,0267906) ==========
当我尝试启用本地崩溃转储时,我发现没有这样的注册表项,所以我无法做到这一点

我找到了导致vstest。--.exe崩溃的所有测试(22个测试),对它们进行了注释,并再次运行所有测试,并且没有那些“错误”的测试。一切正常


这些测试有什么问题?它们都是过去有效的旧测试。如何定位问题?

根据我的经验,StackOverflowXeption通常是由一些永不终止的递归方法调用引起的。试着调试这22个测试中的一个,看看递归是否是问题所在。

根据我的经验,StackOverflowXeption通常是由一些永不终止的递归方法调用引起的。尝试调试这22个测试中的一个,以确定递归是否是问题。

在单元测试中,有多种方法可以找到导致StackOverflowException的原因

最简单的方法可能是运行VisualStudio调试器下标识的22个测试之一。为此,您可以在VS测试资源管理器的上下文菜单中选择“调试所选测试”。如果发生异常,VS将中断,您将能够(非常)深入地查看调用堆栈,找到它在方法调用循环中开始循环的确切位置

这个循环可能有合理的原因(比如递归方法),也可能有bug。在前一种情况下,可能(在许多其他可能性中)一些层次结构数据发生了变化,因此单元测试现在在递归分析层次结构时达到了极限

如果无法在VS调试器中运行单元测试,则必须使用Windows任务管理器获取崩溃的vstest.executionengine.x86.exe的内存转储

为此,您首先要等到您在问题中提到的Windows错误报告(WER)窗口弹出。然后以正确的位打开任务管理器-在您的示例中是32位。这意味着如果您有64位操作系统,则必须启动
C:\Windows\SysWOW64\taskmgr.exe
。如果您有32位操作系统,则可以在
C:\Windows\System32\taskmgr.exe
上运行普通操作系统

然后右键单击
vstest.executionengine.x86.exe进程并选择“创建转储文件”。生成的.dmp文件可以加载到VS或WinDbg中,在这里可以使用SOS扩展分析调用堆栈

对于VS中的内存转储进行调试,您可以阅读更多有关它的信息

关于WinDbg,您必须下载它,设置一些提到的初始配置设置,然后使用所述命令列出线程及其调用堆栈


现在,您应该很容易找到问题的根本原因。

在单元测试中,有多种方法可以找到
StackOverflowException
的原因

最简单的方法可能是运行VisualStudio调试器下标识的22个测试之一。为此,您可以在VS测试资源管理器的上下文菜单中选择“调试所选测试”。如果发生异常,VS将中断,您将能够(非常)深入地查看调用堆栈,找到它在方法调用循环中开始循环的确切位置

这个循环可能有合理的原因(比如递归方法),也可能有bug。在前一种情况下,可能(在许多其他可能性中)一些层次结构数据发生了变化,因此单元测试现在在递归分析层次结构时达到了极限

如果无法在VS调试器中运行单元测试,则必须使用Windows任务管理器获取崩溃的vstest.executionengine.x86.exe的内存转储

为此,您首先要等到您在问题中提到的Windows错误报告(WER)窗口弹出。然后以正确的位打开任务管理器-在您的示例中是32位。这意味着如果您有64位操作系统,则必须启动
C:\Windows\SysWOW64\taskmgr.exe
。如果您有32位操作系统,则可以在
C:\Windows\System32\taskmgr.exe
上运行普通操作系统

然后右键单击
vstest.executionengine.x86.exe进程并选择“创建转储文件”。生成的.dmp文件可以加载到VS或WinDbg中,在这里可以使用SOS扩展分析调用堆栈

要在VS中调试内存转储,您可以阅读有关它的更多信息

关于WinDbg,您必须下载它,设置一些提到的初始配置设置,然后使用所述命令列出线程及其调用堆栈


现在你应该很容易找到问题的根本原因。

你可能是对的。我向我的同事询问了他编辑的一个方法,其中存在无限递归,这可能会导致vstest.exe崩溃。在修复之后,我会看看是否只是这个问题。现在谢谢你。你可能是对的。我向我的同事询问了他编辑的一个方法,其中存在无限递归,这可能会导致vstest.exe崩溃。在修复之后,我会看看是否只是这个问题。现在谢谢你。现在我不知道哪一个答案应该标记为我问题的答案。vstest崩溃的原因是真正深层的递归函数。所以我认为@Jonas发布了答案。不管怎么说,您已经对如何调试这些类似问题做了一个很好的总结。我认为这将有助于这里的许多用户。谢谢。现在我搞不清楚哪一个答案必须标记为我问题的答案。vstest崩溃的原因是真正深层的递归函数。所以我认为@Jonas发布了答案。不管怎么说,你放了一个很好的总结,说明了如何调试这些sim卡