C# 仅在调试时执行ExecutionEngineeException
我有一个C代码,只有在调试时才会抛出ExecutionEngineeException。当我只是在VisualStudio中运行它而不进行调试(按“开始而不调试”)按钮时,这段代码工作正常。但当我从VisualStudio调试它时,它抛出ExecutionEngineeException 由于这个问题,我无法调试我的应用程序,因为我试图调试的代码是在有问题的代码段之后执行的 以下是一些细节:C# 仅在调试时执行ExecutionEngineeException,c#,.net,visual-studio-2012,entity-framework-5,executionengineexception,C#,.net,Visual Studio 2012,Entity Framework 5,Executionengineexception,我有一个C代码,只有在调试时才会抛出ExecutionEngineeException。当我只是在VisualStudio中运行它而不进行调试(按“开始而不调试”)按钮时,这段代码工作正常。但当我从VisualStudio调试它时,它抛出ExecutionEngineeException 由于这个问题,我无法调试我的应用程序,因为我试图调试的代码是在有问题的代码段之后执行的 以下是一些细节: 我正在使用Visual Studio 2012 主应用程序是一个调用我的C#代码的C++/CLI应用程
- 我正在使用Visual Studio 2012
- 主应用程序是一个调用我的C#代码的C++/CLI应用程序
- 应用程序运行一段时间,直到它到达C语言中有问题的代码行#
- 相关代码是针对实体框架上下文的查询
- 我使用的是实体框架5
- 存储我的实体的数据库是SQL Server LocalDB(VS2012附带的数据库)
new-DataSet()
,也会发生这种情况
编辑2
我创建了一个小应用程序来演示这个问题。可以找到源代码
欢迎您编译它并尝试运行项目
应用程序
。当创建新的数据集时,它应该在Adder.cs
中使用ExecutionEngineeException
崩溃。请注意,调试器应该是混合的,而不是托管的/本机的。您的C++/CLI代码很可能会损坏垃圾收集堆。非托管代码行为异常的一种非常典型的方式。直到稍后才会发现这一点,比如当您创建一个新对象或运行垃圾收集器时。因此,崩溃的代码与导致崩溃的代码完全无关,并且不会给您任何错误所在的提示
调试这一点没有什么乐趣,通常需要彻底的代码检查、对非托管代码进行大量的单元测试以及数天的调试才能找到它。“仅在调试版本中崩溃”场景也很常见,但这并不意味着发布版本中没有堆损坏。您有点幸运,它会像这样失败,当堆损坏发生在发布版本中时,调试起来要困难得多。您需要投资一个调试分配器来捕获实际的bug,就像您从
中得到的bug一样。这个问题通常使垃圾收集器成为管理内存的首选方法
我表示哀悼并祝您好运。您的C++/CLI代码很可能会损坏垃圾收集堆。非托管代码行为异常的一种非常典型的方式。直到稍后才会发现这一点,比如当您创建一个新对象或运行垃圾收集器时。因此,崩溃的代码与导致崩溃的代码完全无关,并且不会给您任何错误所在的提示
调试这一点没有什么乐趣,通常需要彻底的代码检查、对非托管代码进行大量的单元测试以及数天的调试才能找到它。“仅在调试版本中崩溃”场景也很常见,但这并不意味着发布版本中没有堆损坏。您有点幸运,它会像这样失败,当堆损坏发生在发布版本中时,调试起来要困难得多。您需要投资一个调试分配器来捕获实际的bug,就像您从
中得到的bug一样。这个问题通常使垃圾收集器成为管理内存的首选方法
我表示哀悼并祝您好运。ExecutionEngineeException从何而来?stacktrace为空。根据VS,引发异常时高亮显示的行是LINQ查询本身。也没有InnerException。ExecutionEngineeException源自何处?stacktrace为null。根据VS的说法,抛出异常时高亮显示的行是LINQ查询本身。也没有InnerException。不幸的是,这次你不正确。在长时间调试我的应用程序后,我创建了一个小应用程序,只使用“新建项目”向导来演示这个问题。根本不需要重新调试。在带有.NET 4.5 RTM的Win8 RTM上使用VS2012更新1进行测试。如果这在您的计算机上崩溃,请查找环境问题。我已经安装了最新更新的win7 SP1。你说的很有趣。。。我将在一个虚拟机中测试它,关于它可能是什么有什么想法吗?不幸的是,这次你不正确。在长时间调试我的应用程序后,我创建了一个小应用程序,只使用“新建项目”向导来演示这个问题。根本不需要重新调试。在带有.NET 4.5 RTM的Win8 RTM上使用VS2012更新1进行测试。如果这在您的计算机上崩溃,请查找环境问题。我已经安装了最新更新的win7 SP1。你说的很有趣。。。我将在一个虚拟机中测试它,关于它可能是什么有什么想法吗?