Partage
  • Partager sur Facebook
  • Partager sur Twitter

ERR_INTERNAL_ERROR avec Ogre3D sur Vs2019

    6 février 2021 à 17:53:16

    Bonjour a tous, je viens d'installer sans trop de soucis Ogre3d sur VS2019. Je suis le tuto officiel : https://ogrecave.github.io/ogre/api/latest/tutorials.html, mais j'ai fait une installation avec le SDk pour Vs, donc sans CMake.

    Mon programme compile, charge les dll et les plug-ins, mais plante avec pour dernières lignes :

    DefaultWorkQueue('Root') initialising on thread 10952.

    DefaultWorkQueue('Root')::WorkerFunc - thread 10180 starting.

    DefaultWorkQueue('Root')::WorkerFunc - thread 7540 starting.

    Particle Renderer Type 'billboard' registered

    SceneManagerFactory for type 'BspSceneManager' registered.

    SceneManagerFactory for type 'PCZSceneManager' registered.

    MovableObjectFactory for type 'PCZLight' registered.

    MovableObjectFactory for type 'Portal' registered.

    MovableObjectFactory for type 'AntiPortal' registered.

    PCZone Factory Type 'ZoneType_Octree' registered

    SceneManagerFactory for type 'OctreeSceneManager' registered.

    Et mon debugger VS me renvoie ERR_INTERNAL_ERROR(6). J'ai cherché sur internet mais sans succès...

    Merci bcp pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      7 février 2021 à 18:15:37

      Up !

      -
      Edité par Anikin Starkiller 7 février 2021 à 18:16:34

      • Partager sur Facebook
      • Partager sur Twitter
        8 février 2021 à 10:32:06

        Le debugger ne donne pas qu'une valeur d'exception : pile d'appels, valeurs des variables, des paramètres, etc..., ainsi que les codes sources correspondants.
        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          9 février 2021 à 11:03:34

          C'est ce qu'il me renvoie.

          -
          Edité par Anikin Starkiller 9 février 2021 à 11:09:58

          • Partager sur Facebook
          • Partager sur Twitter
            9 février 2021 à 12:19:23

            Ogre3D, c'est de l'Open-Source et c'est fait en C++.

            C'est pas parce que c'est pas "votre" code que vous y êtes aveugle. Rassurez-vous, ça rend pas aveugle de lire du code qu'on n'a pas écrit.

            C'est du code C++ et vous devriez savoir le décoder et donc trouver la source du problème.

            Le code montré dans la copie d'écran, c'est la partie qui lance l’exception (le "haut" de la pile d'appels).

            Vous n'avez qu'à décoder le code C++ pour en connaitre l'origine.

            Ici, c'est vraisemblablement une MACRO/code utilitaire pour construire et lancer les exceptions.

            Vous n'avez qu'à savoir d'où vient la valeur dans la variable "code".

            Comme Ogre, c'est pas fait par des branquignoles, il y a toutes les chances que cette valeur vienne d'un paramètre de la MACRO ou de la fonction utilitaire.

            Pour remonter la pile d'appels et ainsi aller à la source de cette valeur et donc du problème, il suffit d'utiliser l'onglet "Pile des appels" (merci captain obvious), en bas à gauche de la fenêtre en bas à droite.

            En cliquant sur les différentes lignes affichées dans cette fenêtre, vous passerez du code source d'une fonction au code source de la fonction qui a appelé, directement ou indirectement, les autres fonctions, plus "haut" dans la pile. La plus en haut est la dernière à avoir été appelée.

            Le debugger mais le curseur sur la ligne de la fonction qui appel la fonction un grand au-dessus dans la pile d'appels.

            P.S.: Il m'a fallu au moins 10 fois plus de temps pour rédiger ce message que de temps pour remonter "effectivement" à la source du problème.

            P.P.S.: Vous êtes en Release, commencez par chercher à corriger en Debug.

            • Partager sur Facebook
            • Partager sur Twitter
            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
              2 mars 2021 à 19:06:23

              Désolé pour le délai de ma réponse.

              Je suis passé en débug, l'erreur est maintenant une bad_alloc et quand je vais dans la pile d'appel, je n'ai pas le fichier en dessous de la position de mon curseur :

              • Partager sur Facebook
              • Partager sur Twitter
                2 mars 2021 à 20:04:28

                Bon, bin, un bad_alloc, c'est 99% du temps le fait de faire un new/malloc avec une taille à la con, genre un -1 qui se transforme en une énorme valeur en passant en unsigned.

                Mais en regardant la demi ligne du bas de la pile d'appel de votre copie d'écran, ça parait encore plus trivial. (suspenssss !)

                >je n'ai pas le fichier en dessous de la position de mon curseur

                Si vous n'avez pas vous même compilé OgreBites.dll ou correctement configurer votre serveur de symbole/le configuration de vos projet au niveau de la génération des pdb, c'est normal.

                Mais les détails affichés dans la pile d'appels montrent que le débogueur a accès aux pdb de OgreBites.dll et/ou de la C++ Runtime associée.

                Faudrait peut-être penser à installer les sources de la C-Runtime et de la C++-Runtime dans Visual Studio (ça doit être une des options à la con dans l'instalateur/usine à gaz de Visual Studio). (en plus de celles d'Ogre3D même si vous ne faites qu'utiliser les Dll).

                Mais bon, en regardant cette demi ligne coupée dans la fenêtre de la pile d'appel, on voit un appel à "std::string::assign".

                Si ce type d'appel arrive à une exception "bad_alloc", il y a 99,99999999% de chance, minimum, que "vous" lui avez donné de la mer.. en paramètre.

                N'hésitez pas à descendre dans la pile pour arriver à un endroit correspondant à votre code et qui correspond à l'appel qui a déclenché le problème.

                Il y a gros à parier que ses paramètres sont foireux ou que les objets utilisés pour faire le boulot de cet appel sont dans un état merdique.

                Vous devriez assez facilement voir d'où vient le problème.

                Si le code source de la STL vous fait mal aux yeux, c'est normal et ne cherchez pas de bug dedans, c'est plus qu’improbable.

                C'est votre manière de l'utiliser (ou Ogre3D) qui la fait "planter".

                Donc, soit vous descendez directement dans la pile d'appel pour atteindre votre code et analyser les paramètres que vous donnez à la primitive ; soit vous commencez par le haut de la pile où vous connaissez le paramètre qui est aux fraises et vous descendez vers l'appelant en voyant d'où vient le paramètre foireux dans le code de l'appelant et vous descendez récursivement jusqu'au bug (à 99%de chance dans votre code).

                • Partager sur Facebook
                • Partager sur Twitter
                Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                  3 mars 2021 à 11:27:32

                  L'erreur vient de la longueur du nom de l'app qui est de 15. Mais en la enlevant/ajoutant des lettres il me renvoie un std::length_error :

                  Et je ne peux pas accèder aux fichiers de la piles d'appel.

                  -
                  Edité par Anikin Starkiller 3 mars 2021 à 11:28:32

                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 mars 2021 à 11:50:43

                    Salut,

                    Pourrais tu déjà nous montrer la définition de ta classe App, pour que l'on sache à quoi correspond OgreBites::ApplicationContext dans ton code

                    Pourrais tu aussi nous montrer le code qui crée une instance de ta classe App?

                    En attendant, peut-être pourrais tu déjà laisser le constructeur "par défaut" de OgreBites::ApplicationContext faire son travail pour voir si tout se passe bien?

                    Dans le pire des cas, vu que tu utilises une version récente du compilateur, tu devrais plutôt utiliser les acollades pour pour l'instanciation de OgreBites::ApplicationContext, voire, faire un appel explicite au constructeur adéquat pour la chaine de caractères, quelque chose qui pourrait ressembler à

                    App::App(): OgreBites::ApplicationContext(OgreBites::String{"12345678912345"}}{
                    }

                    PS: es tu sur que la version de Ogre que tu utilises a bien été compilée avec le même compilateur, dans la même version que celui que tu utilises?

                    -
                    Edité par koala01 3 mars 2021 à 11:51:56

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                      3 mars 2021 à 11:57:10

                      Google me donne :

                      https://ogrecave.github.io/ogre/api/1.10/class_ogre_bites_1_1_application_context.html

                      Je ne vois pas de constructeur qui prend en paramètre un vieux pointeur tout pourri "char *" qu'implique votre utilisation toute pétée d'une chaîne de caractère en dur.

                      Je ne vais pas chercher à comprendre quel mécanisme foireux a réussi à faire passer cette ignominieuse valeur en dur pour une "const Ogre::String &" et je vous conseille d'en faire de même, en fournissant une référence constante sur une "Ogre::String" et pas une chaîne de caractère C stockée aléatoirement entre la section ".code" ou la section ".data" de votre exécutable.

                      (Pensez à régler les warning de votre compilateur et à les lire dans les résultats de compilation, SVP)

                      >Et je ne peux pas accèder aux fichiers de la piles d'appel.

                      Déjà expliqué dans mes précédents post, je crois.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                        3 mars 2021 à 18:43:04

                        koala01 a écrit:

                        Pourrais tu déjà nous montrer la définition de ta classe App, pour que l'on sache à quoi correspond OgreBites::ApplicationContext dans ton code

                        Pourrais tu aussi nous montrer le code qui crée une instance de ta classe App?

                        #pragma once //App.h
                        #include <iostream>
                        #include <Ogre.h>
                        #include <Bites/OgreApplicationContext.h>
                        #include <RTShaderSystem/OgreShaderGenerator.h>
                        
                        class App : public OgreBites::ApplicationContext, public OgreBites::InputListener
                        {
                        public :
                        	App();
                        
                        	void setup();
                        	bool keyPressed(const OgreBites::KeyboardEvent& evt);
                        
                        };
                        #pragma once //main.cpp
                        #include "App.h"
                        
                        int main(int argc, char* argv[])
                        {
                            App app;
                            app.initApp();
                            app.getRoot()->startRendering();
                            app.closeApp();
                            return 0;
                        }

                        koala01 a écrit:

                        En attendant, peut-être pourrais tu déjà laisser le constructeur "par défaut" de OgreBites::ApplicationContext faire son travail pour voir si tout se passe bien?

                        Même erreur : std::length_error


                        bacelar a écrit:

                        (Pensez à régler les warning de votre compilateur et à les lire dans les résultats de compilation, SVP)

                        J'ai plus de 500 warnings dont la majorité est du type :
                         AvertissementC26495La variable 'Ogre::AnimableValue::<unnamed-tag>::mBaseValueInt' n'est pas initialisée. Initialisez toujours une variable membre (type.6).TestOgre3DC:\Users\Utilisateur\Documents\Prog\Lib\Ogre3D\include\OGRE\OgreAnimable.h142

                        bacelar a écrit:

                        >Et je ne peux pas accèder aux fichiers de la piles d'appel.

                        Déjà expliqué dans mes précédents post, je crois.


                        Mais j'ai installé le C-runtime dans l'installateur vs.



                        • Partager sur Facebook
                        • Partager sur Twitter
                          3 mars 2021 à 21:21:55

                          Même si le code de @koala01 a une erreur (il y a une parenthèse ouvrante à la place d'une accolade ouvrante), c'est pas une raison pour ne pas suivre ses très bons conseils.

                          Déjà qu'on n'est en mode "good cop/bad cop", et c'est moi qui tient la matraque, si vous suivez pas les conseils du "good cop", ça va charcler.

                          Si vous avez suivi son conseil de prendre le constructeur par défaut de "OgreBites::ApplicationContext" et que vous vous prenez un "std::length_error", ça sentirai bien une incompatibilité entre Ogre3D et la C-runtime utilisé par le compilateur. C'est possible mais il est aussi possible que vous ayez mal compris les instructions de @koala01. Sans le code, impossible de trancher.

                          Le conseil d'utiliser un "constructeur" de "OgreBites::String" explicitement (conseil de @koala01 et aussi le mien) devrait plus vous prémunir contre ces incompatibilités potentielles. Donc essayez cette technique, SVP. :pirate:

                          >J'ai plus de 500 warnings dont la majorité est du type :

                          Heu, vous voulez qu'on vous tienne la main pour corriger ces warning ? :colere2:

                          https://docs.microsoft.com/fr-fr/cpp/code-quality/c26495?view=msvc-160

                          Si c'est les développeurs d'Ogre3D qui travaillent comme des porcs :

                          https://www.fluentcpp.com/2019/08/30/how-to-disable-a-warning-in-cpp/

                          Mais je crois plus dans une localisation entre la chaise et le clavier.

                          >Mais j'ai installé le C-runtime dans l'installateur vs.

                          Ouais, peut-être, mais moi j'ai indiqué "les sources de la C-Runtime", nuance !

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                            3 mars 2021 à 21:54:32

                            Concernant les warnings de Ogre, il y a une chose beaucoup plus facile à faire des pragma partout: https://devblogs.microsoft.com/cppblog/broken-warnings-theory/ (ce n'est plus expérimental dans les dernières versions).

                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 mars 2021 à 12:07:12

                              J'avais déjà essayé le code de @koala01 mais ça n'a rien changé :

                              App::App() : OgreBites::ApplicationContext(Ogre::String{ "12345678912345" })
                              {}
                              App::App() : OgreBites::ApplicationContext(Ogre::String{})
                              {}
                              App::App() : OgreBites::ApplicationContext()
                              {}

                              Les sources C-Runtime ne sont pas disponible sur l'installeur Vs et je ne les ai pas trouvés sur internet.



                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 mars 2021 à 15:05:23

                                Bacelar te l'as pourtant dit: mon doigt a glissé de l'accolade vers la parenthèse dans le code que je te présentais (et que je vais donc corriger).  Il fallait lire (et utiliser, du coup)
                                App::App() : OgreBites::ApplicationContext{Ogre::String{ "12345678912345" })
                                {}
                                Maintenant, si cela ne change rien et que le code
                                App::App(){
                                
                                }

                                te donne toujours le même résultat, c'est qu'il y a -- de toutes évidences -- un problème d'incompatibilité entre le système qui a été utilisé pour compiler la version de Ogre que tu utilises et ton compilateur.

                                A vrai dire, il en suffit parfois de pas grand chose pour que cette incompatibilité survienne, si bien qu'une des premières choses à faire -- après avoir essayé avec un projet le plus basique possible, histoire de s'assurer que ce n'est pas tout simplement le code que l'on a écrit qui est foireux (ce qui arrive très régulièrement, surtout lorsque l'on débute) -- c'est sans doute d'essayer de compiler soi-même une version récente de la bibliothèque que l'on souhaite utiliser, directement avec le compilateur que l'on s'apprête à utiliser pour notre projet ;)

                                Et, comme, en plus, ogre utilise CMake pour sa propre configuration, cela ne devrait vraiment pas être compliqué à réaliser

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                                  4 mars 2021 à 15:13:55

                                  Perso, j'utilise vcpkg pour mon moteur de jeu basé sur Ogre3D, et n'a plus de problèmes.
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Si vous ne trouvez plus rien, cherchez autre chose.

                                    4 mars 2021 à 17:45:23

                                    >Les sources C-Runtime ne sont pas disponible sur l'installeur Vs

                                    J'ai pas un VS2019 sous la main mais cela bien étonnant.

                                    Mais qu'importe, n'utilisez pas de conversion implicite de "char *" en "Ogre::String".

                                    Et traitez correctement les warning, pour que le compilateur vous aide à détecter ces compatibilités potentielles.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                      4 avril 2021 à 17:39:51

                                      Bonjour,

                                      pour eviter la conversion implicite de "char *" en "Ogre::String" j'ai créé une variable "appName" comme ceci :

                                      main.cpp

                                      const Ogre::String& appName{ OGRE_VERSION_NAME };
                                      App app(appName);

                                      App.cpp

                                      App::App(const Ogre::String& appName) : OgreBites::ApplicationContext{appName}
                                      {}

                                      et j'ai aussi essayé d'enlever le "const" et/ou la & et de remplacer "OGRE_VERSION_NAME" par du texte lambda entre guillemets...

                                      Il me reste deux m^me warnings dont je ne comprends pas comment les résoudres : 

                                      Avertissement	C4275	interface non dll class 'Ogre::MaterialManager::Listener' utilisée comme base d'une interface dll class 'OgreBites::SGTechniqueResolverListener'
                                      

                                      dragonjoker a écrit:

                                      Perso, j'utilise vcpkg pour mon moteur de jeu basé sur Ogre3D, et n'a plus de problèmes.

                                      J'ai essayé, j'ai eu beaucoup de mal à installer Ogre avec, mais une fois qu'il a trouvé la bibliothèque, et aprs avoir dû corriger les chemin d'include des fichiers ogre, il me renvoie 15 erreurs LNK2019 alors que j'ai bien les dll dzns mon dossier.



                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        4 avril 2021 à 18:31:37

                                        La présence des dll ou non dans un quelconque répertoire du disque n'a strictement aucun rapport avec les erreurs ou warnings de compilation ou d'édition des liens. Seuls comptent les fichiers d'imports des dll: en général .lib avec Visual Studio et .dll.a pour MinGW (mais parfois aussi .lib).

                                        Les dll n'ont d'importance qu'à l’exécution du programme.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          4 avril 2021 à 19:29:44

                                          Oui je n'ai pas mis les .lib dans mon projets parce ce qu'il y a marqué (je l'ai vu sur plusieurs sites) qu'avec vcpkg pas besoin de faire de modif dans le projet vs.

                                          Il faut quand m^me les mettres ?

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            4 avril 2021 à 21:02:03

                                            Je n'utilise pas vcpkg, plutôt conan, mais si je lis ceci https://docs.microsoft.com/fr-fr/cpp/build/integrate-vcpkg?view=msvc-160#integrate-with-visual-studio-on-windows, non pas de modif à faire dans Visual Studio si tu as bien suivi les étapes, la magie noire opère j'imagine.

                                            Peut être aller voir sur le github de vcpkg si ce "port" a des issues en cours dans le style que tu vois.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              5 avril 2021 à 11:57:29

                                              J'ai bein suivi les etapes, je n'ai pas vu d'issues dans le github qui corresponde au problème...
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                5 avril 2021 à 17:41:03

                                                Tu as fait l'appel à "vcpkg integrate install" ? (ou un truc dans le genre, je m'en sers pas, je passe par CMake)
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Si vous ne trouvez plus rien, cherchez autre chose.

                                                ERR_INTERNAL_ERROR avec Ogre3D sur Vs2019

                                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                • Editeur
                                                • Markdown