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 :

[Compatibilité] Bug à l'éxécution


Sujet :

C++

  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [Compatibilité] Bug à l'éxécution
    Bonjour à tous,

    Je viens de développer une application avec Visual Studio 8 sous Windows 2000. Le code utililsé est "natif", et je n'utilise que des bibliothèques portables : Boost, STL, Vigra, ZipArchive, WxWidget.

    Problème : Mon programme fonctionne très bien sur mon PC, ainsi que sur ceux de tous mes collègues, sauf un, où certaines fonctionnalités bug de manière aléatoire.

    Ma question : Comment un programme peut fonctionner parfaitement sur mon PC (Windows 2000) et planter sur un autre (Windows XP en l'occurence)? Tous les tests ont été fait sous Windows, je n'envisage pas pour l'instant de faire tourner mon appli sous Linux.
    La version de Windows serait-elle en cause? Un problème Windows?

    Merci de votre aide !

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Une DLL mal copiée ?
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre expérimenté Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Par défaut
    Tout depends du type d'application que c'est

    Une possibilité est la difference de version des dlls de base que tu utilise.

    Apres, selon le type d'appli, des differences subtiles peuvent etre liés a ton systeme d'exploitation.

    Exemple simple et vécu : Un programme a moi, utilisant OpenGL : quitte correctement sous winXP familial(ou plutot, a l'air de ), crash au quit sous winXP Media Center edition.....

    Maintenant je sais ce qui causait le crash, mais par contre, toujours pas compris la difference de comportement ...

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    C'est une appli WxWidget (donc GUI). Vous pensez à une différence de DLL ?

    EDIT : oui il y avait effectivement un problème de DLL !

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Bon, là j'ai un gros problème au niveau du déploiement de mon logiciel.
    J'ai développé mon appli sous Windows 2000, et le cas qui pose problème pour l'instant est sous XP...
    J'ai un message de Visual C++ Run Time Library au moment de l'utilisation d'une fonction du logiciel :
    "the application has requested the Run Time to terminate in an unusual way"...
    Le pire, c'est que c'est une de mes collègues développeurs, qui possède donc Visual C++ 2005 sur sa machine !

    Si vous avez une idée, je suis preneur...

    beaucoup !

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 400
    Par défaut
    En clair, ça veut généralement dire qu'une assertion a pété (ou du moins, que la fonction abort() a été appelée).

    S'il y a Visual sur la machine destination, déploie une version Debug et fait tourner le programme dans le debugger...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je pense qu'une exception produit le même message d'erreur.

  8. #8
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Effectivement, c'était une exception... dûe à un échec de rapatriement de données venant d'un serveur
    Ca marche sur mon PC pourtant. Bon ça doit être un problème réseau, et pas de mon programme.

    et bien vu !

  9. #9
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Bon, là je ne sais pas quoi faire !
    Je vous montre le code, vous aurez peut-être une explication à me donner. De mon côté, je vais essayer d'être le plus explicite possible sur mon 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    void Camera_IR_Bi_Visee::importImage(int numero_image)
    {
    	m_numero_image = numero_image; // On met à jour le numéro de la dernière image regardée
     
    	std::vector<unsigned short> image(77120); //image vide que l'on passe en paramètre de la routine serveur IRImage
    	unsigned short* image_ptr = &image[0]; // pointeur sur cette image
     
            //cas de la première image
    	if (m_numero_image == 0)
    	{
    		m_image = vigra::UInt16Image(m_image_width, m_image_height);
    		m_image.init(0);
    	}
    	else
    	{
    		int cr;
    		{
                            std::cout << m_numero_image << std::endl; // ligne qui fait marcher le programme ! :-(
    			boost::mutex::scoped_lock scoped_lock(serveur_mutex); //pour éviter plusieurs appels serveurs de différents threads
    			cr  = IRimages(getChocNum(), m_numero_camera, m_numero_image, m_numero_image, &image_ptr); //APPEL SERVEUR -> on va chercher l'image n° 'm_numero_image'
                            // pour la stocker dans l'image 'image' (le vector du début)
    		}
                    // c'est ici que l'exception est levée : cr ne vaut pas 0
    		vigra_precondition(cr == 0, "Erreur de communication avec le serveur"); 
     
    		convertionDLTemperature(m_image);// Conversion de DL en température	
    	}
    }
    Mon programme fait une itération sur un film entier comportant 5500 images.
    Le code plante vers l'image 4500, pas sur mon PC, mais sur celui de ma collègue...
    Si je rajoute le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::cout << m_numero_image ;
    ce code ne plante plus... C'est tout de même extraordinaire non?

    Il doit y avoir une logique, mais je ne la vois pas...

    Surtout, si vous avez une idée, je vous écoute...

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par poukill Voir le message
    Mon programme fait une itération sur un film entier comportant 5500 images.
    Le code plante vers l'image 4500, pas sur mon PC, mais sur celui de ma collègue...
    Si je rajoute le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::cout << m_numero_image ;
    ce code ne plante plus... C'est tout de même extraordinaire non?

    Il doit y avoir une logique, mais je ne la vois pas...

    Surtout, si vous avez une idée, je vous écoute...
    C'est que tu as une erreur mémoire dans ton code. Ce qui génère un comportement indeterminé.
    Aprés à savoir ou....

    EDIT
    il manque plein de chose dans ton code pour t'aider....
    a quoi sert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::vector<unsigned short> image(77120);
    unsigned short* image_ptr = &image[0];
    qu'es ce que "m_image"?

    Vu que tu est en thread. tu as peut etre un problème de mise a jour entre les thread

  11. #11
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    • Que devrait valoir cr apres le bloc "threadé"
    • Comment fonctionne vigra_precondition
    • Es-tu sur que le test cr==0 soit cohérent par rapport à la pré-condition
    • vigra_precondition lance-t-il une exception ou un signal d'erreur quelconque (peut être voir si on peut le récupérer)


    Précision: je ne connais pas vigra, donc je lance des directions de recherche
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  12. #12
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,
    Que devrait valoir cr apres le bloc "threadé"
    0, quand l'appel serveur s'est bien passé.

    Comment fonctionne vigra_precondition
    vigra_precondition( condition, message de l'exception à lancer)
    Ca évite juste d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (condition == false)
    {
        throw std::exception ....
    }
    Es-tu sur que le test cr==0 soit cohérent par rapport à la pré-condition
    si cr vaut autre chose que 0, c'est qu'on a pas pu rapatrier l'image, donc le serveur n'a pas fait son boulot, par contre il serait bon de voir effectivement ce que vaut cr, car j'ai une liste des valeurs de retour possibles avec leur signification...
    vigra_precondition lance-t-il une exception ou un signal d'erreur quelconque (peut être voir si on peut le récupérer)
    Comme je viens de le dire, l'exception lancé est juste : "Erreur de communication avec le serveur", nom que j'ai décidé moi-même.


    Précision: je ne connais pas vigra, donc je lance des directions de recherche
    Y'a pas de problème !
    Vigra est une lib de traitement d'image donc assez spécifique...

    à tous les deux pour vous pencher sur mon problème!

  13. #13
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    qu'es ce que "m_image"?
    C'est la dernière image "téléchargée" de la caméra...
    En fait, j'aurai presque pu pas faire intervenir m_image dedans, puisque je fais intervenir uniquement des tailles d'image : largeur et hauteur...

  14. #14
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par poukill Voir le message

    Comme je viens de le dire, l'exception lancé est juste : "Erreur de communication avec le serveur", nom que j'ai décidé moi-même.
    Ca, c'est plutot le message obtenu quand on ferait un
    mais le type de l'exception, quel est-il dérivé de std::exception ou similaire

    Peut être faut-il faire "remonter" cette exception, jusqu'à ce qu'on soit en mesure de la gérer peut être qu'un simple log suffit

    [EDIT]verifie peut être "visuellement" la valeur de cr avant de partir dans vigra_precondition
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  15. #15
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    oui les exceptions vigra dérivent de std::exception, comme toute bonne conception...
    Pour ta culture personnelle, plutôt qu'un long discours, c'est très bien expliqué ICI : http://kogs-www.informatik.uni-hambu...Reporting.html


    C'est marrant, car je pensais avoir un bloc try catch qui allait la choper... Apparemment pas...

    Là je suis en grand week-end, donc je suis pas au boulot avant mardi prochain. Je ne pourrai tester toutes ces idées que dans 4 jours.

    Merci à toi en tout cas !

Discussions similaires

  1. bug lor de l'éxécution du code
    Par redguana dans le forum C++
    Réponses: 1
    Dernier message: 15/05/2008, 14h59
  2. Réponses: 1
    Dernier message: 08/06/2007, 22h58
  3. Compatibilité logiciel et bug mandriva linux
    Par manu265 dans le forum Mandriva / Mageia
    Réponses: 7
    Dernier message: 07/01/2007, 15h08

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