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 :

Type d'exception inconnu


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Type d'exception inconnu
    Bonjour,

    J'ai une exception que je n'arrive à choper qu'avec catch(...).

    Le code suivant n'est-il pas de même supposé attraper toutes les exceptions ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    catch (const std::exception &e)
    {
        cerr << e.what();
    }
    Sinon, quel est le moyen pour connaître le type d'une exception ?

    Merci.

  2. #2
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Le code suivant n'est-il pas de même supposé attraper toutes les exceptions ?
    Malheureusement, en C++, il est possible de lever des exceptions... qui n'en sont pas ! En effet :
    est un code valide. Et le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    catch(std::exception& e)
    ne permet pas de récupérer cette levée. A priori, n'importe quel objet C++ (au sens du langage) peut être utilisé dans une expression throw. Il faut te documenter sur les objets utilisés. En particulier, sous Windows/MFC, les CException sont utilisées et ne sont pas des exceptions standards. Pire, ce sont des pointeurs vers des exceptions qui sont "jetés".

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    En fait, l'exception est "jetée" par l'instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw AmException( MString("Unable to find RenderGlobals"), __FILE__, __LINE__);
    sachant que AmException est définie par :

    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
    #include <exception>
    #include <maya/MString.h>
     
    class AmException : public std::exception
    {
    public:
        AmException(MString msg, const char *file = NULL, int line = -1);
        virtual const char *what(void) const;
     
    private:
        MString mMessage;
        MString mFile;
        int mLine;
    };
    #endif /* _EXCEPTION_H_ */
    Je précise qu'aucun destructeur n'a (encore) été codé.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ton code est censé rattraper tout ce qui dérive de std::exception, ce qui est le cas de AmException, donc il doit y avoir une erreur autre part. Tu peux essayer d'extraire un code minimal qui reproduit le problème, ça ne devrait pas être très dur vu le contexte restreint.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Il y avait en fait une autre exception qui venait s'intercaler, et qui a troublé le raisonnement.

    Cela dit, si j'arrive bien à présent à attraper la classe xxception, je n'arrive pas à attraper AmException... :-/

    Au fait, c'est bizarre, Visual 2003 ne reconnaît pas par Intellisense ("autocompletion") std::exception, alors qu'il n'y a aucun problème pour std::bad_alloc.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Bon, rien à faire, je n'arrive pas à attraper mon instance AmException.

    Je remets quelques morceaux de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    throw AmException( MString("Unable to find RenderGlobals"),
                                         __FILE__, __LINE__);
    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
    catch (int)
    {
    	AmLogger::write(AM_MESG, "Dudule");
    }
     
    catch (AmException &amException)
    {
        AmLogger::write(AM_MESG, "amException");
        AmLogger::write(AM_MESG, amException.what());
    }
     
    catch (const std::exception &e)
    {
    	AmLogger::write(AM_MESG, e.what());
    }
    Si je balance un entier ou une instance d'exception (je parle de la classe), pas de problème. Mais avec AmException, que dalle...

    Merci pour votre aide, car je susi à la ramasse, là.

Discussions similaires

  1. type Rapport d'exception : inconnu ?
    Par shawty dans le forum Struts 1
    Réponses: 6
    Dernier message: 18/04/2007, 09h54
  2. [D7] connaître un type d'exception et la gérer
    Par _alex_ dans le forum Delphi
    Réponses: 3
    Dernier message: 29/08/2006, 13h41
  3. gestion d'exception inconnue
    Par r0d dans le forum C++
    Réponses: 10
    Dernier message: 17/08/2006, 21h20
  4. Problème avec une erreur d'exception inconnue
    Par yoyo72 dans le forum Delphi
    Réponses: 5
    Dernier message: 09/08/2006, 11h52
  5. [STRUTS] Intercepter tout type d'exception.
    Par Hervé Saladin dans le forum Struts 1
    Réponses: 4
    Dernier message: 24/06/2005, 17h12

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