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 :

Gestion des erreurs


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut Gestion des erreurs
    Bonjour,
    Je voudrais gérer de manière globale les erreurs de mon programme. Existe t'il des règles de bonne pratique?

  2. #2
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    généralement tu créés une ou plusieurs classes Erreur.

    ensuite dans un bloc où il peut y avoir des erreurs:
    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
    17
    18
    19
    20
    21
    22
    23
     
    try
    {
      //bloc
      {
         .....
         {....
            if ( testerreur) // METTEZ un test à la place
            {
             Erreur er; // le nom de la classe erreur de son instance
             throw er;  //ca passe direct à la fin du bloc try et détruit les objets statiques dedans
             }
          }
        ... 
        }
    }
     
    catch (Erreur er) // nom de la classe erreur et son objet
    {
      //gestion de l'erreur
    }
    catch(...) //Ca attrape tout ce qui n'a pas été attrapé par les autres catch comme erreur
    {gestion de l'erreur}
    Si tu veux plus de détails, recherche sur les exxceptions.

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Il y a tant à dire sur ce sujet.
    En gros, rapidement.

    J'utilise des assert (vive les core dump) pour détecter les erreurs de programmation.

    J'aime bien les STATIC_CHECK (cf Modern C++ Design / Loki) -- boost a une macro similaire -- pour vérifier la consistance statique de mon code. Comme p.ex. que le nombre d'éléments dans un tableau correspond bien au nombre de valeurs possibles d'un type énuméré.

    J'utilise des exceptions pour les erreurs liées au contexte d'exécution. Dans certains cas particuliers j'utilise des objets qui peuvent être dans un état invalide ou incomplet, et qui ne lêvent pas pour autant des exceptions -- cf les flux standard du C++.

    Concernant les exceptions, il y a des petites choses à savoir :
    - elles changent complètement la façon de gérer les ressources -- cf tout ce qui tourne autour de l'exception-safety que l'on (*) a enfin fini par comprendre, fais une recherche en particulier sur le RAII dans la FAQ. (et si je puis en rajouter une couche, le SESE (Single Entry - Single Exit -> recherche avancée!) n'est plus une fatalité vu que les exceptions le déstabilisent et que le RAII le remplace pour bien gérer les ressources)
    Dans cette même famille, le test anti auto-affectation dans l'opérateur d'affectation est un contre-idiome.

    - on doit les lever par valeur, et les attraper par référence (-> maladresse dans le code de coyotte507, maladresse qui se transforme en erreur dans le cas d'une hiérarchie d'exceptions)

    - les spécifications d'exception dans les signatures des fonctions sont des attrape-nigauds. En effet, ce sont des assertions dynamiques non débrayables en mode release. Le compilateur ne vérifiant rien du tout à notre place.

    - Grâce au RAII, il n'est pas nécessaire de truffer son code de blocs try-catch. On ne les utilise alors qu'au moment où l'on est capables de les interpréter et de les traiter -- parfois il s'agit de simple log vers l'utilisateur, ou des convertions depuis un type d'exception vers un autre

    - J'aime bien avoir des classes RAIIsantes qui logguent en entrée et en sortie de portée

    - Dans la FAQ C++lite, il y a une technique intéressante de dispatching d'exceptions

    - il est parfois interessant de définir des classes qui tiennent plus du contrat que de l'interface : les fonctions publiques sont non virtuelles, elles vérifient les pré-, post-conditions et les invariants, et elles appellent au milieu une fonction privée/protégée virtuelle pure (pure dans la déclaration de la classe contrat).

    - Matthew Wilson a pondu quelques artices repris dans un chapitre de son Imperfect C++ au sujet de la gestion des erreurs.

    (*) je généralise peut-être un peu vite


    J'ai certainement oublié des choses. J'ai probablement parlé de trucs qui vont te passer au dessus de la tête. Et j'ai très certainement été excessivement succinct.
    Il y a tant à dire, qu'il est difficile de parler avec des généralités.

    Autre bonne lecture : Coding Standards qui a quelques points à ce sujet, que j'ai d'ailleurs repris.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Pour certains trucs particuliers, c'est-à-dire pour lesquels une erreur n'est pas une exception, il vaut mieux ne pas utiliser les exceptions.

Discussions similaires

  1. [FB] Gestion des erreurs et application francophone
    Par Benjamin GAGNEUX dans le forum Installation
    Réponses: 10
    Dernier message: 20/05/2006, 14h54
  2. [struts][Datasource]Gestion des erreurs
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/09/2004, 16h51
  3. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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