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+ avec C & C++ Discussion :

Comment déboguer des GList


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut Comment déboguer des GList
    Bonjour à tous,

    J'utilise QtCreator pour coder en C avec la bibliothèque Gtk+

    J'ai une petite fenêtre de débogage qui me permet de visualiser les données :
    Nom : debug.png
Affichages : 101
Taille : 12,4 Ko

    Seulement je tombe sur un os quand je souhaite visualiser le contenue d'une GList car le membre data est du type gpointer.

    Avez-vous une solution pour que je puisse visualiser une GList ? Car j'arrive au bout de mes limites avec g_print.


    Cdlt,

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Je dirai qu'il est normal que tu obtiennes un gpointer puisque le pointeur "data" est un pointeur générique. À moins de connaitre par avance le type à afficher, je ne vois pas trop comment tu peux faire pour le déterminer.

  3. #3
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    je ne vois pas trop comment tu peux faire pour le déterminer.
    Il y a une fonction g_type_name_from_instance dans /usr/share/glib-2.0/gdb/gobject.py qui retourne le nom de la class. Comme en C g_type_name(G_TYPE_FROM_INSTANCE(obj)) ou directement avec const gchar * g_type_name_from_instance (GTypeInstance *instance);Il me suffirai ensuite de faire un transtypage obj = glist["data"].cast (gdb.lookup_type("AntlrInterval").pointer())Seulement voila, en pratique ça ne marche pas, j’obtiens None en retour au lieu de "AntlrInterval". J'ai plus d'idée, je ne sais pas sur quel bitonio je dois appuyer pour que ça fonctionne.

    PS: En forçant le type j'arrive a ça
    Nom : debug.png
Affichages : 107
Taille : 61,8 Ko

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    GType est utilisé lors de la création d'un nouveau GObject (ou Derivé). Tu insères des GObject dans ta liste ou bien un pointeur sur une structure classique ?

  5. #5
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    J'utilise des GObject dans ma liste.
    Aussi j'utiliserai sûrement une GList de int. mais pas de structure.

    Edit 1:

    La fonction def g_type_name_from_instance me retourne None parce que quand elle appel def g_type_to_name l'appel a gdb.lookup_type("TypeNode") lance une exception. Le type TypeNode n'existe pas. J'ai regardé dans la doc j'y ais trouvé GType GtypeInfo GTypeInstance mais je ne sais pas ce qu'est TypeNode, et le membre qname ne me dit rien


    Edit 2:
    Pour ceux qui veulent essayer sans avoir a installer QtCreator. Il faut avoir la gtk+ d'installé et gdb avec le module python activité.
    L’exercice consiste à faire fonctionner la fonction python g_type_name_from_instance()
    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
    /* file: main.c */
    #include <gtk/gtk.h>
    #include <stdlib.h>
     
    void my_stop(void){}
    int
    main (int argc, char *argv[])
    {
        GList *list = NULL;
        GtkWidget *window;
     
        gtk_init (&argc, &argv);
     
        window = create_window ();
        g_print("window is type of %s\n", g_type_name_from_instance(window));
     
        list = g_list_append(list, window);
        /* ... */
        list = g_list_append(list, window);
        my_stop();
     
        return EXIT_SUCCESS;
    }
    Pour compiler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $]gcc `pkg-config gtk+-2.0 --cflags` main.c -o main `pkg-config gtk+-2.0 --libs`
    Pour debugger:
    1. On lance gdb
    2. On ajoute un point d'arret
    3. On lance l'exécute
    4. On test quand ca marche
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      (gdb) python gdb.lookup_type("GtkWindow")
    5. On test quand ca marche pas
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      (gdb) python gdb.lookup_type("TypeNode")
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      gdb.error: No type named TypeNode.
      Error while executing Python code.
    6. On quit


    J'ai besoin de faire un gdb.lookup_type("TypeNode") par ce que c'est ce qu'utilise /usr/share/glib-2.0/gdb/gobject.py dans g_type_name_from_instance a cette ligne

    Tout aide serrai apprécié,

    PS: Peut-être que TypeNode est défini par gdb TypeNode est définie dans gobject/gtype.c

  6. #6
    Membre régulier Avatar de Persistant
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2016
    Messages : 50
    Points : 73
    Points
    73
    Par défaut gdb.error: No type named TypeNode.
    Bonsoir,

    Il faut s'assurer d'avoir la libglib2.0-0-dbg - Symboles de débogage pour les bibliothèques GLib disponible sur son système.
    Et la python-gobject-dbg - modules de débogage Python 2.x pour GObject

    Nom : Capture.png
Affichages : 78
Taille : 205,5 Ko

Discussions similaires

  1. Comment effacer des Items d'un TListView ?
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/11/2002, 10h19
  2. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 10h31
  3. [TP][MULTI-PROBLEME]Comment afficher des images pcx
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 24/10/2002, 13h57
  4. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  5. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 16h33

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