Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exception et fichier de LOG

    14 février 2020 à 16:06:57

    Bonjour à tous,

    J'essaie d'intégrer un fichier de LOG dans un programme (je développe sous VS avec le module QT VS TOOLS)

    Je viens de "découvrir" les exceptions et je pensais faire de la sorte :

    void toto(int i)
    {
        if (i < 0)
            throw std::runtime_error("la valeur saisie est négative");
    
        // Reste du code
    }
    
    int main()
    {
        
        try 
        {
            toto(-2);
        }
    
        catch (std::exception const& exception)
        {
            emit errorLOG(exception.what());
        }
    
    }



    Premièrement, quel est votre avis sur la façon de faire?

    Et quelle est la différence avec ce code :

    void toto(int i)
    {
        if (i < 0)
            emit errorLOG("la valeur saisie est négative");
        else
        {
            //reste du code
        }
    }
    
    int main()
    {
        toto(-2);
    }



    J'ai un peu du mal à saisir l'intérêt de l'exception.

    Merci pour vos lumières.

    TY

    -
    Edité par ThugYo 14 février 2020 à 16:09:57

    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2020 à 17:59:02

      Attendons les plus calés, mais pour moi si tu utilise try tu peux meme faire des trucs comme des acces hors tableau ça ne plante pas l’appli alors que le deuxieme exemple peux te planter toute l’appli
      • Partager sur Facebook
      • Partager sur Twitter
        14 février 2020 à 19:19:39

        emit n'est pas standard, ça fait quoi?

        Sinon les exceptions, c'est pour dérouter un comportement que l'on sait ne pas pouvoir continuer parce des entrées externes ne sont pas compatibles avec ce que l'on voudrait en faire.

        • Partager sur Facebook
        • Partager sur Twitter
        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
          14 février 2020 à 19:44:55

          Emit fait partie du framework Qt il emet un signal qui est récupérable par un slot.

          exemple emit fichier téléchargé etc

          • Partager sur Facebook
          • Partager sur Twitter
            17 février 2020 à 10:04:48

            Bonjour,

            Si j'ai bien compris, l'exception, dans le cas où elle est générique, va indiquer qu'il y a eu une erreur. Si je fais un if, je dois savoir quelle erreur je cherche. C'est ça?

            • Partager sur Facebook
            • Partager sur Twitter
              17 février 2020 à 10:32:06

              Un try/catch global, c'est foireux.

              On perd bien trop d'informations importantes.

              L'utilisation d'un whatchdog et la génération automatique d'un dump, c'est bien plus fiable.

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                17 février 2020 à 10:35:17

                bacelar a écrit:

                L'utilisation d'un whatchdog et la génération automatique d'un dump, c'est bien plus fiable.


                En français ça donne quoi ? :)

                PS: j'ai pas un gros niveau en dev et j'ai pas le lexique de dev non plus

                • Partager sur Facebook
                • Partager sur Twitter
                  17 février 2020 à 11:56:12

                  Vu la vérification que tu réalises, je te dirai bien de lire les 3 articles sur la programmation par contrat dans mon blog (signature).

                  Un log trace ce qu'il se passe à un moment donné, il n'influe pas (drastiquement) le déroulement flot d'exécution. C'est totalement orthogonal à ce que je résume en dessous. i.e. on peut l'utiliser en plus, ou pas, c'est notre choix.

                  Une exception interrompt le flot d'exécution. Elles sont à privilégier pour vérifier une situation externe (d'origine) sur laquelle nous n'avons pas de contrôle depuis le code.

                  Une assertion est là pour indiquer que si elle n'est pas remplie il y a alors une erreur de conception/programmation et qu'il n'est pas possible de continuer car on n'a pas prévu le code pour résister à la situation. En cas de supposition non remplie, selon le mode d'exécution, on plante le programme et on force le développeur à corriger son erreur, ou on continue car on pense qu'il n'y a plus lieu d'impacter les performances à vérifier dynamiquement toutes les situations impossibles.

                  La difficulté est de trouver la frontière entre les deux. Je creuse la question dans mes billets de blog.

                  Dans tous les cas, un log ne suffit pas à arrêter de continuer quand on sait que la situation est anormale.

                  -
                  Edité par lmghs 17 février 2020 à 12:01:44

                  • Partager sur Facebook
                  • Partager sur Twitter
                  C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                    17 février 2020 à 12:39:14

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                      17 février 2020 à 12:55:16

                      Dans ton cas, on peut certes créer une log, cependant, il faut penser à propager l'exception, faute de quoi, elle est considérée comme traitée et la propagation de cette dernière est interrompue, ce qui n'est pas désirable.

                      De plus, même si l'intention est louable, elle possède un gros inconvénient:
                      La prolifération des blocs try / catch peut sévèrement nuire à la lisibilité de ton code source.
                      Donc: A utiliser avec parcimonie.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 février 2020 à 13:17:53

                        N'abuse pas de la programmation défensive. Une fonction doit faire le minimum et ce n'est pas à elle de vérifier que tout ce qui est passé en entrée est juste.

                        Si la valeur peut venir de l'utilisateur, c'est au moment où tu fais la saisie que tu dois faire la vérification. La fonction elle n'a que faire de savoir de où la valeur vient.

                        En revanche, une assertion peut-être bienvenue pour détecter les erreurs de programmation pendant le développement.

                        -
                        Edité par markand 17 février 2020 à 13:22:19

                        • Partager sur Facebook
                        • Partager sur Twitter
                        l'azerty est aux dispositions ce que subversion est aux SCM
                          17 février 2020 à 13:50:46

                          Bon je potasse tout ça, je reviens vers vous au besoin.

                          Merci pour vos retour.

                          A+

                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 février 2020 à 2:02:20

                            > Attendons les plus calés, mais pour moi si tu utilise try tu peux meme faire des trucs comme des acces hors tableau ça ne plante pas l’appli alors que le deuxieme exemple peux te planter toute l’appli

                            Je réagis juste sur ça. Un accès hors tableau est toujours un problème et cause d'erreur. Contrairement à certains langages, il n'y a pas magiquement d'exception dans un tel scénario, c'est au développeur de vérifier le dépassement et de lancer une exception. Donc, pour qu'une exception arrive, il faut déjà faire cette vérification. Et après vient tout le débat sur programmation défensive vs programmation par contrat expliqué dans les articles de @lmghs

                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 février 2020 à 11:58:58

                              Je parlais des hors tableau car pour moi le try catch sert surtt pendant le dev, mais c’est pe etre une simplification négative de ma part.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 février 2020 à 12:38:21

                                Ca sert à revenir à un point de reprise: on indique à l'utilisateur que sa donnée est foireuse et on lui permet de recommencer.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                                  18 février 2020 à 13:01:00

                                  JeromeHumbert2 a écrit:

                                  Je parlais des hors tableau car pour moi le try catch sert surtt pendant le dev, mais c’est pe etre une simplification négative de ma part.


                                  Non, la raison d'être des exception est prendre en charge les évènements sur lesquels tu n'as aucun contrôle.
                                  Par exemple une allocation dynamique qui foire, ou une connection à une base de données qui saute.
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Exception et fichier de LOG

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  • Editeur
                                  • Markdown