124 votes

Une application se bloque avec «une erreur interne dans le runtime .NET»

Nous avons une demande écrite contre .NET 4.0 qui, durant le week-end s'est écrasé, en mettant le message suivant dans le journal des événements:

Application: PnrRetrieverService.exe Cadre Version: v4.0.30319
Description: Le processus a été interrompu en raison d'une erreur interne dans l' .NET Runtime IP 791F9AAA (79140000) avec le code de sortie 80131506.

C'est sur un Serveur Windows 2003 R2 Standard Edition box. Googler cette erreur n'a pas tourné quelque chose de pertinent. Par exemple, ce n'est pas survenu dans VS Studio, mais plutôt sur une boîte de production; lorsque le service a finalement été redémarré, il a connu plus de problèmes.

Comment fait-on pour le diagnostic d'un bug dans le .NET Runtime?

133voto

Hans Passant Points 475940

avec le code de sortie 80131506

C'est un méchant, ExecutionEngineException. En commençant avec .NET 4.0, cette exception se termine immédiatement le programme. Le générique de la cause de la corruption de l'état de l'déchets ramassés en tas. Qui à son tour est toujours causée par le code non managé. L'emplacement exact dans le code au cours de laquelle cette exception est soulevée n'est pas utile, la corruption habituellement s'est produite bien avant le dommage est détecté.

Trouver la cause exacte de la cela va être difficile. Revoir tout le code non managé le service est peut-être en utilisant. Suspect de l'environnement de problèmes si il n'est pas évident candidat, de virer les scanners de logiciels malveillants connus. Si elle se répète très mal alors soupçonner des problèmes matériels comme des RAM erreurs.

43voto

Un bug dans la concurrente de la mise en œuvre de la Collecte des Ordures sur x64 .Net 4 peuvent être en cause, comme indiqué dans la suite de microsoft KB entrée:

ExecutionEngineException se produit au cours de la Collecte des Ordures

Vous devez d'abord faire une profonde minidump d'exploration pour être sûr que le problème s'est produit lors d'une collecte des Ordures.

Le minidump emplacement peuvent généralement être trouvés dans un rapport d'Erreurs Windows entrée dans le journal des événements suite à l'accident d'entrée. Alors, amusez-vous avec WinDbg !

Dans ce cas, un lien dans l'article explique comment désactiver simultanées des Ordures.

9voto

Jason Points 125291

J'ai rencontré des "erreurs internes" dans le runtime .NET qui étaient dues à des bogues dans mon code; ne croyez pas que, simplement parce que c'était une "erreur interne" dans le runtime .NET, il n'y a pas de bogue dans votre code en tant que cause première. Toujours toujours toujours blâmer son propre code avant de blâmer quelqu'un d'autre.

J'espère que vous disposez des informations de journalisation et des informations de trace d'exception / de pile pour vous indiquer où commencer, ou que vous pouvez répéter l'état du système avant le crash.

7voto

Joao Milasch Points 649

Pour ceux qui arrivent ici à partir de google, j'ai finalement trouver ce DONC, la question, et cette réponse qui a résolu mon problème. J'ai contacté Microsoft pour obtenir le correctif via le chat en direct sur support.microsoft.com et ils m'ont envoyé un lien vers le correctif par e-mail.

4voto

Filip Frącz Points 2697

Peut-être un bogue avec le GC simultané http://support.microsoft.com/kb/2679415

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X