JIT intercepte avec mon Catch [Résolu]

cs_vincnet68 100 Messages postés samedi 26 octobre 2002Date d'inscription 24 mai 2013 Dernière intervention - 27 mai 2011 à 10:03 - Dernière réponse : cs_vincnet68 100 Messages postés samedi 26 octobre 2002Date d'inscription 24 mai 2013 Dernière intervention
- 21 juin 2011 à 11:33
Bonjour,

J'ai un problème lorsque je lance mon application avec l'EXE en Release (pas depuis VS2010).

J'ai ce code dans le main() pour traiter les erreurs que j'aurais oublié.

#if !DEBUG
            try
            {
#endif
...
...
            frmMain mainForm = new frmMain();
            Application.Run(mainForm);
            
#if !DEBUG
           }
            catch (Exception ex)
           {
            MessageBox.Show("Une erreur est survenue, l'application va se fermer\r\n" + ex.Message, "Erreure non gérée");
           Application.Exit();
           }
#endif


Mais lorsqu'il y a une exception c'est le debogger JIT qui prend le relais et la messagebox ne s'affiche pas.

Comment puis-je faire ?

Merci de votre aide.

Vincnet68
Afficher la suite 

11 réponses

Répondre au sujet
cs_vincnet68 100 Messages postés samedi 26 octobre 2002Date d'inscription 24 mai 2013 Dernière intervention - 21 juin 2011 à 11:33
+3
Utile
J'ai trouvé la solution en cherchant autre chose.

Dans le main() j'ai ajouté
System.AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);


Et cette methode un peu plus bas
  static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            try
            {
                Log.Add(e.ExceptionObject as Exception, false);
                MessageBox.Show("Une erreur non gérée est apparue, l'application vas redémarrer, les données seront perdus\r\n
Le detail de l'erreur à été enregistré dans le fichier Log", "Erreur",
 MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
                Application.Restart();
            }
            catch
            {
            }
        }


Pour l'instant les tests on fonctionnés. Je vous tiens au courant si cette solution n'intercepte pas toutes les exceptions.

Vincnet68
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_vincnet68
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 27 mai 2011 à 10:06
0
Utile
Bonjour,

c'est un peu violent comme gestion d'erreur :D

Et sinon, c'est quoi ton message ?


Sébastien FERRAND
Lead Developpeur
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
Commenter la réponse de sebmafate
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 27 mai 2011 à 10:14
0
Utile
Salut,

As-tu bien un #undef ton DEBUG ?
Sinon fais le et recompile en mode release pour voir.
Commenter la réponse de cs_jopop
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 27 mai 2011 à 10:30
0
Utile
pas besoin de #undef DEBUG... tout cela se gère dans les propriétés de compilation du projet.


Sébastien FERRAND
Lead Developpeur
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
Commenter la réponse de sebmafate
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 27 mai 2011 à 10:35
0
Utile
Je me sers pas du précompilo en C#
C'est juste des souvenirs de quand je faisais du C y'a trèèèès longtemps ^^

Par contre je pense que ça demande n'est pas de corriger son exception, mais de la manager lui-même. Il a sûrement ses raisons.
Commenter la réponse de cs_jopop
cs_vincnet68 100 Messages postés samedi 26 octobre 2002Date d'inscription 24 mai 2013 Dernière intervention - 27 mai 2011 à 10:42
0
Utile
Oui exactement jopop, j'ai surement oublié certaines erreurs. le but c'est de pas planter violament l'appli et surtout d'enregistrer l'erreur dans un log afin que je puis la corriger dans la version suivant.

c'est quoi : #undef ?

Merci

Vincnet68
Commenter la réponse de cs_vincnet68
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 27 mai 2011 à 10:54
0
Utile
Un lien pour plus d'info sur les directives du préprocesseur.

Mais comme le dit sebmafate c'est géré en auto suivant la config de compil'.
Donc je pense pas que ça te soit bien utile.
Commenter la réponse de cs_jopop
cs_vincnet68 100 Messages postés samedi 26 octobre 2002Date d'inscription 24 mai 2013 Dernière intervention - 27 mai 2011 à 14:09
0
Utile
Merci jopop pour les directives du préprocesseur (je sais maintenant à quoi correspond #undef)

Mais je n'ai pas encore résolu mon problème.

Toutes idées sont les bienvenues.

Merci

Vincnet68
Commenter la réponse de cs_vincnet68
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 27 mai 2011 à 14:46
0
Utile
Pour en revenir au sujet de départ... il n'est pas conseiller de faire un try/catch sur le Application.Run().

Par contre, tu peux utiliser l'event ThreadException de l'objet Application.

frmMain mainForm = new frmMain();
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(mainForm);


Sébastien FERRAND
Lead Developpeur
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
Commenter la réponse de sebmafate
cs_vincnet68 100 Messages postés samedi 26 octobre 2002Date d'inscription 24 mai 2013 Dernière intervention - 30 mai 2011 à 08:17
0
Utile
Bonjour Sebmafate,

j'ai essayer ThreadException mais cela ne marche pas, c'est toujours le JIT qui me donne l'exception.(apparement c'est pour gérer uniquement les exceptions tread Interuuption).

Est-ce que quelqu'un à une idée pour gérer les erreurs éventuelle de mon appli.

Merci

Vincnet68
Commenter la réponse de cs_vincnet68
cs_vincnet68 100 Messages postés samedi 26 octobre 2002Date d'inscription 24 mai 2013 Dernière intervention - 8 juin 2011 à 11:48
0
Utile
Je me permet de relancer le sujet, car je n'est toujours pas de solution.

Toutes les idées sont les bienvenus.

Merci de votre aide

Vincnet68
Commenter la réponse de cs_vincnet68

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.