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

GTK+ Discussion :

gtkmm et cairomm : crash de l'appli


Sujet :

GTK+

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Par défaut gtkmm et cairomm : crash de l'appli
    Bonjour,

    Je travaille actuellement sur une appli windows/linux qui fonctionne avec GTK et cairo (cairo me sert à faire un widget graphique à partir d'un DrawingArea). Mon appli fonctionne sur les deux plateformes sans problème.

    Seulement voila, j'ai voulu la porter à gtkmm, et depuis elle ne fonctionne plus sous windows (aucun prob sous linux par contre).

    En gros si je la lance sans le debugger, elle crashe toute seule très rapidement, après quelques redraw de mon widget (90% dès le premier). Si j'execute en debug, l'appli déclenche un breakpoint toute seule qui me ramène sur du code assembleur, à l'instruction :

    J'ai vérifié, ce code assembleur correspond justement au déclenchement manuel d'un breakpoint.

    En limitant les parties de codes à être executé, j'ai remarqué que le breakpoint ou le crash ont la même origine, dans ma fonction de rendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	Glib::RefPtr<Gdk::Window> window = get_window();
    	if ( !window )
    		return ERR_UNINITIALIZED_OBJECT;
     
    	Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
    Il s'agit de en fait du déréférencement de la variable cr (l'appel à son destructeur, donc), à la fin de la fonction où se trouve ce code. Si je m'arrange pour que cr soit sauvegardé en global, et donc qu'il ne soit pas déréférencé à la fin du traitement de l'affichage, le programme ne crash qu'à la fermeture (lorsque la variable globale est déréférencé).

    Je répète que mon code fonctionnait très bien sous GTK+/cairo, et que je n'ai fait que porter les appels de fonction. Il fonctionne également sous linux avec gtkmm/cairomm, c'est pour ca que je pense qu'il s'agit d'un problème avec le compilo de windows ou une histoire de link incorrect...

    J'utilise Visual Studio Express 2008.

    Si quelqu'un a une idée de la raison de ce problème, voir une ébauche de solution, je prend ! =)

    Merci.

  2. #2
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Par défaut
    Pour simplifier le problème, voici une appli minimale qui me cause le même souci :

    MyWidget.h :
    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
    #ifndef __MYWIDGET_H__
    #define __MYWIDGET_H__
     
    #include <gtkmm.h>
     
    class MyWidget : public Gtk::DrawingArea
    {
    public:
    	MyWidget();
     
    protected:
    	virtual bool on_expose_event( GdkEventExpose* event );
    };
     
    #endif
    MyWidget.cpp :
    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
    #include "MyWidget.h"
     
    bool MyWidget::on_expose_event( GdkEventExpose* event )
    {
    	Glib::RefPtr<Gdk::Window> window = get_window();
    	if ( !window )
    		return FALSE;
     
    	//Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
    	return FALSE;
    }
     
    MyWidget::MyWidget()
    {
    	set_size_request( 280, 300 );
    }
    main.cpp
    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
    #include <stdio.h>
    #include <gtkmm.h>
     
    #include "MyWidget.h"
     
    int main(int argc, char *argv[])
    {
    	Gtk::Main gtkmain( argc, argv );
     
    	// Window
    	Gtk::Window window;
    	window.set_default_size( 640, 480 );
    	window.show();
     
    	// MyWidget
    	MyWidget myWidget;
    	window.add( myWidget );
    	myWidget.show();
     
    	Gtk::Main::run( window );
     
    	return 0;
    }
    Ca se lance si j'execute tel quel, mais si je décommente la ligne la :
    //Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
    J'ai de nouveau le même problème...

  3. #3
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    ça marche chez moi commenté ou pas, t'es sûr de tes option de compilation/édition de liens ?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Je testerais la version linux avec valgrind aussi pour voir s'il peut s'agir d'un pb de mémoire.

  5. #5
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    version linux ? moi j'ai testé sous linux ...

    et au passage je fais la même chose dans un code perso et ça marche nikel, avec gtkglext même.

Discussions similaires

  1. Crash de mon appli après un QInputDialog::getText
    Par FoX_*D i E* dans le forum Qt
    Réponses: 2
    Dernier message: 29/06/2014, 16h25
  2. gtkmm et cairomm : crash de l'appli
    Par Benlitz dans le forum Windows
    Réponses: 0
    Dernier message: 17/06/2008, 10h46
  3. Gtkmm - Drawing area - crash
    Par Bertrand_g dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 20/03/2008, 14h19
  4. Cross compilation Linux->Windows d'une appli gtkmm/cairomm
    Par three minute hero dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 30/12/2007, 15h36
  5. [gtkmm] Afficher une image issue de cairomm
    Par camumu dans le forum GTK+
    Réponses: 11
    Dernier message: 07/06/2007, 10h12

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