2010-12-05 6 views
0

J'ai une application de console .NET 4.0 exécutée sur un serveur de production. L'application est exécutée sur une base ad-hoc, est compilée en tant que build de débogage et tous les symboles de débogage sont envoyés au serveur avec l'exe.Impossible de faire fonctionner le débogage: .NET 4.0, serveur Windows 2003

Lorsqu'une exception est générée dans l'application, je m'attends à ce qu'elle meure de façon désagréable et imprime la pile sur la console comme n'importe quelle ancienne application de console. Au lieu de cela, le comportement que je vois est le suivant:

  1. La fenêtre du débogueur JIT apparaît, demandant de déboguer.
  2. Si je dis "oui", cela déclenche une version extrêmement limitée de VS 2005. Je suis vidée dans le langage assembleur et je ne peux pas voir le code source ou le nom du fichier. C'est le cas pour tous les niveaux de la trace de pile.
  3. Si je dis "non", aucune information n'est écrite sur la console.

J'ai essayé d'exécuter ceci dans un shell PowerShell et une console cmd traditionnelle avec le même effet.

Le serveur exécute ASP.NET 4.0 et n'a aucun problème à renvoyer ces erreurs au navigateur. Ce que je désire, c'est simplement voir la vraie erreur et la pile imprimée sur la console sans que le JIT apparaisse. Mis à part un catch et write global, quelles sont mes options?

+0

Courez-vous sous un compte autorisations d'administrateur? – Oded

+0

S'il vous plaît voir ma réponse à http://stackoverflow.com/questions/4346970/how-to-capture-a-running-net-process-to-disk/4350019#4350019 pour savoir comment générer un vidage sur incident, qui peut être inspecté dans le débogueur. –

+0

Oui, le compte est administrateur. – roufamatic

Répondre

1
using System; 

class Program { 
    static void Main(string[] args) { 
     AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
     throw new Exception("test"); 
    } 

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { 
     Console.WriteLine(e.ExceptionObject.ToString()); 
     Console.ReadLine(); 
     Environment.Exit(1); 
    } 
} 
+0

Oui, je sais que je peux le faire. Je suis plus intéressé par pourquoi je ne peux pas simplement voir un échec comme je peux dans la plupart des autres environnements. – roufamatic

+0

La gestion des exceptions non gérées a été modifiée dans .NET 4.0. Cible 3.5 pour voir la différence. –

+0

Vous ne pouvez pas passer plus de temps à ce sujet, et c'est assez facile. Merci. – roufamatic

Questions connexes