IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème Unhandled exception


Sujet :

C#

  1. #1
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Par défaut Problème Unhandled exception
    Bonjour,

    Je préviens je débute en C#.

    Je souhaite intercepter une exception via un bloc try catch. Si mon application est en mode debug et si mon exception est déclenchée, le bloc catch l'intercepte et le traitement associé est réalisé.

    Toutefois, si mon application est en mode release (l'application est déployée) et si mon exception est déclenchée, Windows prend donc la main (une boîte de dialogue apparait avec un message de type Unhandled exception) sur mon application et mon bloc catch ne l'intercepte pas, alors qu'il devrait.

    Ma question est la suivante:
    Comment désactiver le fait que Windows puisse prendre la main quand il y a ce genre de problème.

    Merci d'avance
    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Salut,

    Un try/catch doit fonctionner de la même manière en debug et release (tu parles bien de compilation debug et release, pas d'appli lancée avec un debugger ou pas ?). On peut voir à quoi ressemble ton catch ? Il se peut qu'en release ce ne soit pas la même exception qui est lancée ?

    Comment désactiver le fait que Windows puisse prendre la main quand il y a ce genre de problème.
    Pour tte exception non gérée par ton appli, windows prendra forcement la main. Selon le type de ton appli (console, winform, asp.net) tu peux aussi t'abonner auprès d'évènements qui sont levés qd une exception non gérée se produit (voir ici).

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Dans les 2 cas que ce soit une compilation en mode débug ou en mode release, ça passe par le CLR pour la sécurité (normal sinon à quoi servirait-t-il ?). Pour ce qui est des exceptions, normalement il devrait les rattraper, Windows lui n'a jamais la main sur une exception .NET car elle est toujours gérée par le CLR, c'est peut être dû à un paramètre de compilation.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Certes c'est .Net qui cherche dans un premier temps un gestionnaire d'exception managé mais qd il n'en trouve pas toute exception est remontée au niveau au dessus: windows (enfin sauf dans le cas d'une appli asp.net heureusement et peut-être dans certain cas particuliers). Et même si ce n'est pas windows, par ce que je ne maîtrise pas ce qui se passe exactement à ce niveau, c'est au moins un gestionnaire "global" d'exception du CLR qui prend la main et qui termine l'application, ce qui revient au même.

  5. #5
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Juste comme ça ...
    Pourrais-tu donner un exemple de code où tu penses que le catch n'est pas atteint et le type d'exception levée ?

  6. #6
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Par défaut
    Bonjour à tous et merci pour les réponses,

    Je viens de re-faire le bout de code de la manière à l'isoler dans une simple application et tout va bien.

    Voici le petit bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    private void button1_Click(object sender, EventArgs e) {
     string aWebServiceAnswer;
     string aXmlFile = "<WEB_SERVICE OPERATION=\"LANGUES\"><SECURITY></SECURITY></WEB_SERVICE>";
     try {
      //Creation d'un instance du service
      localhost.DataEnvironnementService webServicesData = new localhost.DataEnvironnementService();
     
      //Appel d'un service
      aWebServiceAnswer = webServicesData.getLanguages(aXmlFile);
     
      //Affichage de la réponse
      textBox1.Text = aWebServiceAnswer;
     } catch (Exception ex) {
      MessageBox.Show("Erreur avec le web service \n\r" + ex.Message);
     }
    }
    En y réfléchissant par rapport au problème initial, le souci vient peut être du fait que l'appel à ce petit bout de code (qui génère l'exception) se fait à partir d'un thread. Ainsi, dans ce cas, ça ne passe pas.

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Les appels à des contrôles depuis un autre thread que le thread propriétaire de ces contrôles est à proscrire. Et le comportement de ce code peut changer selon que tu sois en degug/release ou avec un debugger attaché. Tu peux voir une explication sur la bonne manière de faire les choses ici.
    Et je n'en suis pas sûr mais peut-être que l'appel à MessageBox.Show peut poser un problème depuis un thread qui n'a pas de file de message associée (mais je m'avance un peu là). Ce qui fait que dans ton catch tu pourrais lever une autre exception.

  8. #8
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par Sphax Voir le message
    Et je n'en suis pas sûr mais peut-être que l'appel à MessageBox.Show peut poser un problème depuis un thread qui n'a pas de file de message associée (mais je m'avance un peu là). Ce qui fait que dans ton catch tu pourrais lever une autre exception.
    Je ne crois pas, le seul problème que j'ai pu voir avec les MessageBox c'est que si on les lance dans un finaliseur (~laclasse()) elle ne reste pas affichée longtemps car le CLR kill les finaliseurs qui prennent du temps ...

    Au fait tu pourrai essayer de rajouter un handler dans AppDomain.UnhandledException pour voir ...

  9. #9
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Par défaut
    Bonjour à tous,

    Comme écrit plus haut, je débute dans la plateforme .NET. Venant du monde Java, j'essaye de faire le parallèle pour résoudre le problème.

    Dans le cas de la boîte à outils graphique SWT, quand des éléments graphiques sont modifiées il faut passer par le thread qui gère la couche graphique appelée ThreadUI. Dans le cas contraire une exception système est déclenchée.

    Je me demandais si ça ne pouvait pas être la même chose.

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Oui, c'est le même principe. Il faut utiliser la méthode Invoke de la form pour exécuter une méthode sur le thread de la Form.

  11. #11
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Sinon on ne le fait pas on obtient une InvalidOperationException avec comme message "Cross-thread operation not valid" ... cependant si je me souvient bien cette erreur n'est lancée en général que si le debugger est attaché au processus ...
    Plus d'informations sur ce comportement sont disponibles ici

Discussions similaires

  1. Problème Unhandled exception dans un enum
    Par shark59 dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 05/10/2011, 17h57
  2. unhandled exception class System.SecurityException
    Par the big ben 5 dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2005, 17h41
  3. unhandled exception
    Par PRUVOT dans le forum MFC
    Réponses: 4
    Dernier message: 27/10/2005, 08h57
  4. [SimpleDateFormat] problème d'exception
    Par julienOriano dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 12/07/2004, 17h01
  5. Réponses: 5
    Dernier message: 12/06/2002, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo