2009-04-01 5 views

Répondre

2

Vous ne pouvez pas. Il n'y a rien à faire pour la journalisation. Le mieux que vous pouvez faire est un programme de surveillance externe, mais cela ne peut pas vraiment dire beaucoup de choses sur ce qui s'est passé à moins que vous ne détruisiez votre code avec la notation «twitter»; "Je ne tente pas de contacter la base de données", "J'ai contacté la base de données", "J'envoie une requête", ...

+0

ouais. c'est ce que je pense aussi. – Jack

0

Heartbeats. Une seconde machine écoute constamment un battement de coeur, puis crie si elle n'arrive pas. Bien sûr, les problèmes de traitement lent/réseau génèrent parfois des avertissements éventuellement incorrects, mais les causes sous-jacentes sont souvent des signes importants de problèmes en attente.

0

Il y a quelques options ici. Si vous n'êtes pas concernés par ce que j'appelle ETW (fin du monde) exceptions comme StackOverflowException (? Que diriez-vous que), vous pouvez envelopper le tout dans un bloc try-catch-finally dans votre point d'entrée:

static void Main() 
{ 
    try 
    { 
     // Run... 
    } 
    catch (Exception ex) 
    { 
     // Log failure. 
    } 
    finally 
    { 
     // Log shutdown. 
    } 
} 

Si vous utilisez du filetage du tout, les choses deviennent beaucoup plus désordonnées. L'utilisation correcte des délégués et du modèle Begin/End Invoke propage les exceptions sur le thread en cours (lorsque la méthode EndInvoke est appelée). L'utilisation de la classe Thread rendra les choses plus compliquées. Je peux sans risque supposer qu'il y a un moyen de faire face à cela (mais personnellement, je n'utilise pas souvent des threads propres). J'ai lu sur les tubes que pour une raison quelconque une exception ETW dans votre AppDomain est fatale pour l'ensemble AppDomain (même si cela ne devrait pas être si cela ne se produit pas sur votre thread principal); ne comptez pas sur les threads si vous voulez les éviter. En ce qui concerne les exceptions ETW, votre meilleur pari est d'isoler le code potentiellement buggé dans un autre AppDomain (hors ou en cours) et d'y accéder via Remoting. Remoting vous protégera de ces exceptions. L'accès à distance vous protégera également des terminaisons inattendues de l'application cible. Rien ne vous évitera d'éteindre le poste de travail à moins que vous ne puissiez le nettoyer dans un laps de temps limité (Windows tentera d'abord de fermer votre application de manière déterministe). J'ai expérimenté avec CER, mais je n'ai rien inventé. Vous voudrez peut-être regarder l'article MSDN this.

Questions connexes