2010-10-18 10 views
3

Situation:Uncatchable erreur .NET runtime 2.0 - machine de l'utilisateur - que faire ensuite?

J'ai une application qui utilise intensivement les connexions http (stream ripping app) et qui est supposée fonctionner 24h/24 et 7j/7. Et c'est le cas.

Cependant, de temps en temps, il se bloque avec l'erreur d'exécution qui est uncaught partout, et les décharges suivantes dans le journal des événements:

Event Type: Error 
Event Source: .NET Runtime 2.0 Error Reporting 
Event Category: None 
Event ID: 5000 
Date:  13.10.2010 
Time:  11:02:30 
User:  N/A 
Computer: STREAM01 
Description: 
EventType clr20r3, P1 streamsink.exe, P2 1.0.0.42484, P3 4c880fd9, P4 mscorlib, P5 2.0.0.0, P6 4add54dc, P7 344a, P8 21c, P9 system.io.ioexception, P10 NIL. 

Ma question est: comment savoir quelle ligne de code a causé l'accident. Je déploie des fichiers .PDB avec les binaires, mais ... Que faire?

cible est Windows XP, Framework 2.0 est

EDIT:

Je possède ce déjà mis en œuvre:

static public void InitializeExceptionHandler(string AppName) { 
     Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
     Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 
     AppDomain currentDomain = AppDomain.CurrentDomain; 
     currentDomain.UnhandledException+=new UnhandledExceptionEventHandler(currentDomain_UnhandledException); 
     _appName=AppName; 
    } 

Non, ça ne marche pas!

+1

Ceci est une sorte de fuite à SO. Des dizaines de milliers de questions toutes différentes mais ayant la même réponse. Implémenter AppDomain.UnhandledException et log/display/email/print e.ExceptionObject.ToString(). –

+0

@Hans: malheureusement, cela n'aide pas. Il y a des exceptions qui sont gérées, mais celle-ci passe inaperçue. –

+1

C'est juste une IOException, l'une des plus courantes. Du pain et du beurre, il y a un problème avec votre code. Nous ne pouvons pas voir le gestionnaire d'exceptions dans votre extrait de code, il est probablement imprudent de ne pas appeler Environment.Exit() après vous avoir envoyé un e-mail. –

Répondre

3

Peut-être que cet article sera utile A Simple Class to Catch Unhandled Exceptions in WinForms

MISE À JOUR:

très étrange .. Alors prenez ProcDump, écrire fichier batch et demandez à votre client de courir quand il voit un message d'erreur. Obtenez dump et essayez d'enquêter sur WinDbg ou VS 2010. Here plus d'informations.

Vérifiez également: Creating and analyzing minidumps in .NET production applications. Si vous êtes nouveau WinDbg, consultez Tess Ferrandez's blog

Une autre façon aller avec Remote Debugging Setup

+0

Merci, mais c'est en quelque sorte plus profond que cela ... voir edit et autre commentaire. –

+0

Quelle est votre application, un service Windows ou une application ASP.NET? – Aliostad

+0

! Aliostad: c'est des winforms ... la plupart du temps, les exceptions sont attrapées dans le gestionnaire, mais pas toujours. –

4

registre domaine exception non gérée en cours dans le point d'entrée (Main() ou ...):

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 

Mettre en œuvre l'exploitation forestière dans le gestionnaire:

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
     { 
      // log 
     } 

L'application va toujours planter, mais vous obtiendrez la journalisation complète de ce qui s'est passé et la trace de la pile.

MISE À JOUR

Selon la mise à jour que vous avez, je vous suggère de télécharger des outils de débogage pour Windows http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx puis activez le débogage post-mortem et assurez-vous d'un vidage sur incident est créé (voir Activation section Postmortem Débogueur Windbg fichier d'aide) et utilisez Windbg pour déboguer votre sauvegarde pour savoir où il s'est écrasé.

+0

Merci, mais j'ai cela en place, traitant également ThreadExcetion. Pas de pain là-bas. :(voir mon edit ... –

+0

Voir mes mises à jour maintenant s'il vous plaît – Aliostad

1

Si vous ne parvenez pas à implémenter une solution de gestion des exceptions, vous pouvez implémenter un enregistrement de trace pour affiner l'emplacement dans le code et le flux qui provoque l'exception.

Questions connexes