Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
应用程序崩溃,出现“错误”;.NET运行时中的内部错误;_.net_Runtime Error_Executionengineexception - Fatal编程技术网

应用程序崩溃,出现“错误”;.NET运行时中的内部错误;

应用程序崩溃,出现“错误”;.NET运行时中的内部错误;,.net,runtime-error,executionengineexception,.net,Runtime Error,Executionengineexception,我们有一个针对.NET 4.0编写的应用程序,该应用程序在周末崩溃,将以下消息放入事件日志: 应用程序:PnrRetrieverService.exe框架版本:v4.0.30319 描述:由于中的内部错误,进程已终止 在IP 791F9AAA(79140000)上运行的.NET运行时,退出代码为8013506 这是在Windows Server 2003 R2标准版盒上。谷歌搜索这个错误并没有发现任何相关信息。例如,这不是在VS Studio中发生的,而是在一个制作框中发生的;当服务最终重新启动

我们有一个针对.NET 4.0编写的应用程序,该应用程序在周末崩溃,将以下消息放入事件日志:

应用程序:PnrRetrieverService.exe框架版本:v4.0.30319
描述:由于中的内部错误,进程已终止 在IP 791F9AAA(79140000)上运行的.NET运行时,退出代码为8013506

这是在Windows Server 2003 R2标准版盒上。谷歌搜索这个错误并没有发现任何相关信息。例如,这不是在VS Studio中发生的,而是在一个制作框中发生的;当服务最终重新启动时,它没有遇到进一步的问题

如何在.NET运行时诊断错误?

我在.NET运行时遇到了“内部错误”,这些错误是由代码中的错误引起的;不要仅仅因为.NET运行时中存在“内部错误”,就认为代码中没有bug是根本原因。总是在责备别人之前责备自己的代码

希望您有日志记录和异常/堆栈跟踪信息来指示您从何处开始查找,或者您可以重复崩溃前的系统状态

出口代码为80131506

这是一个令人讨厌的问题,ExecutionEngineeException。从.NET 4.0开始,此异常立即终止程序。一般原因是垃圾收集堆的状态损坏。这反过来又总是由非托管代码引起的。在代码中引发此异常的确切位置没有帮助,损坏通常发生在检测到损坏之前


很难找到确切的原因。检查您的服务可能正在使用的任何非托管代码。怀疑环境问题如果没有明显的候选者,行为不端的恶意软件扫描器是臭名昭著的。如果重复性非常差,则应怀疑硬件问题,如软RAM错误。

在x64.Net 4上并发执行垃圾收集时出现的错误可能会导致此问题,如以下microsoft KB条目所述:

您应该首先进行深入的小型转储研究,以确保问题发生在垃圾收集过程中

小型转储位置通常可以在崩溃条目之后的事件日志中的Windows错误报告条目中找到。 然后,享受WinDbg带来的乐趣


可以找到有关使用
配置元素禁用并发或(在.NET 4及更高版本中)后台垃圾收集的最新文档。

在我的示例中,此异常是在磁盘空间用完且.NET无法在Windows虚拟内存中分配内存时发生的

在事件日志中,我看到了以下错误:

应用程序弹出窗口:Windows-虚拟内存最小值过低:您的系统虚拟内存不足。Windows正在增加虚拟内存分页文件的大小。在此过程中,某些应用程序的内存请求可能会被拒绝

和以前的错误:


磁盘已达到或接近容量。您可能需要删除一些文件。

可能是并发GC的错误

对于那些从谷歌来到这里的人,我最终遇到了他们,并解决了我的问题。我已经通过上的live chat联系了Microsoft以获取修补程序,他们通过电子邮件向我发送了一个指向修补程序的链接。

经过多年的努力,在许多应用程序中解决了这个问题,微软似乎终于接受了它,认为它是.NET 4 CLR中的一个bug,导致了这种情况的发生


我之前一直在通过强制垃圾收集器在服务器模式下运行(app.config中的gcServer enabled=“true”)来“修复”它,正如由Think Before Coding链接到的Microsoft文章中所述。这实际上迫使应用程序中的所有线程在收集过程中暂停,从而消除了其他线程访问被GC操纵的内存的可能性。我很高兴地发现,我多年来在我的代码或其他第三方非托管库中徒劳地搜索一个“bug”,结果都是徒劳的,因为bug存在于Microsoft的代码中,而不是我的代码中。

在我的例子中,问题是一个C++/CLI库中调用了;有时由于某种原因(在神秘的情况下),当它被调用时,CLR堆被破坏,应用程序崩溃


我已使用创建的“自定义堆”解决了此问题,并在其中分配了该函数使用的缓冲区。

在我的情况下,此错误发生在登录SAP Business One 9.1应用程序时。在Windows事件中,除了OP报告的错误事件外,我还可以找到另一个错误事件:

Nome dell'applicazione che ha generato l'errore: SAP Business One.exe, versione: 9.10.160.0, timestamp: 0x551ad316
Nome del modulo che ha generato l'errore: clr.dll, versione: 4.0.30319.34014, timestamp: 0x52e0b784
Codice eccezione: 0xc0000005
Offset errore 0x00029f55
ID processo che ha generato l'errore: 0x1d7c
Ora di avvio dell'applicazione che ha generato l'errore: 0x01d0e6f4fa626e78
Percorso dell'applicazione che ha generato l'errore: C:\Program Files (x86)\SAP\SAP Business One\SAP Business One.exe
Percorso del modulo che ha generato l'errore: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
ID segnalazione: 3fd8e0e7-52e8-11e5-827f-74d435a9d02c
Nome completo pacchetto che ha generato l'errore: 
ID applicazione relativo al pacchetto che ha generato l'errore: 

该计算机运行Windows 8.1,安装了.NET Framework 4.0,但未安装4.5版本。从互联网上看,它可能也是.NET 4中的一个bug,我尝试安装.NET Framework 4.5.2,解决了这个问题。

Framework版本:v4.0.30319 描述:由于未处理的异常,进程已终止。 异常信息:System.Reflection.TargetInvocationException

我遇到了这个错误,应用程序在一些PC上运行良好,在一些PC上出现上述错误。我卸载了Framework4.5并重新安装,这解决了我的问题


欢呼。

这可能是终结器中发生的异常。如果您正在执行~Class(){Dispose(false);}的模式,请检查您正在将什么作为非托管资源进行处理。 试一试……在那里接球,你会没事的

我们发现了这个问题,因为我们有一个没有日志的神秘故障 我们按照通常推荐的模式使用“void Dispose(bool disposing)”

查看关于终结器的这个问题的答案,我们发现了一个可能的地方,在这个地方,非托管资源的处置可能引发异常

结果发现,在某个地方,我们没有正确地处理对象,因此终结器接管了非管理的diposal
devenv.exe /ResetSettings 
Faulting application name: devenv.exe, version: 14.0.25123.0, time stamp: 0x56f22f32
Faulting module name: clr.dll, version: 4.7.2115.0, time stamp: 0x59af88f2
Exception code: 0xc0000005
Fault offset: 0x0015f90e
Faulting process id: 0x3a7c
Faulting application start time: 0x01d353463eaf0c36
Faulting application path: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Report Id: a232f984-6e80-4f61-9003-e18a035c8f93
Faulting package full name: 
Faulting package-relative application ID: 
  <dependentAssembly>
    <assemblyIdentity name="Lucene.Net" publicKeyToken="85089178b9ac3181"/>
    <bindingRedirect oldVersion="0.0.0.0-2.9.4.0" newVersion="3.0.3.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Lucene.Net" publicKeyToken="85089178b9ac3181"/>
    <bindingRedirect oldVersion="0.0.0.0-2.9.4.0" newVersion="3.0.3.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0"/>
  </dependentAssembly>