GKCmaTV.fr.st / GKC.fr.st Index du Forum  
  Rechercher  •  Liste des Membres  •  Groupes d'utilisateurs   •  S'enregistrer  •  Profil  •  Se connecter pour vérifier ses messages privés  •  Connexion

La boite à astuces!!

[BlindMan]

Retrouvez dans cette boite une série d'astuces qui pourraient vous être très utiles.

 Utiliser gdb pour tracer un segfault sous xdTV Voir le sujet suivant
Voir le sujet précédent
Poster un nouveau sujetRépondre au sujet
Auteur Message
--pingus
Invité





MessagePosté le: Samedi 3 Avril 2004 12:40:44 Répondre en citantRevenir en haut de page

j'ai écrit un pt laius sur le sujet:

Utiliser GDB sous xdTV:

1) Compiler xdTV en activant le mode debug
Code:

   -> ./configure --disable-nodebug && make


2) Utiliser gdb
a) Lancer xdTV avec gdb: gdb xawdecode
b) A l'invité (gdb) tapez: run (ou run -v 2, pour avoir plus de message)
c) si vous avez un message de ce type:

Code:

   Program received signal SIG32, Real-time event 32.
   0x4076c714 in pthread_getconcurrency () from /lib/i686/libpthread.so.0


a l'invité (gdb) tapez: c (ou continue)
jusqu'a ce que la fenêtre de xdTV apparaisse a l'écran

3) Vous savez reproduire un segfault
allez dans xdTV, faites la ou les actions qui produisent un plantage
de l'application. Lorsque xdTV s'est planté, voici ce que cela peut donner:

Code:

   Program received signal SIGSEGV, Segmentation fault.
   0x4065e6c8 in XInternAtom () from /usr/X11R6/lib/libX11.so.6


vous retournez alors sur l'invité (gdb):
Comment retrouver le bout de code qui a planté?
a) utiliser la commande: where (ou backtrace)

Code:

      (gdb) where
   #0  0x4065e6c8 in XInternAtom () from /usr/X11R6/lib/libX11.so.6
   #1  0x08082a46 in main ()
   #2  0x407cac57 in __libc_start_main () from /lib/i686/libc.so.6


=> ici on voit que ca a planté dans le fonction main()
et que c'est lié à la fonction XInternAtom ()

b) utiliser la commande up pour savoir ce qui s'est produit avant
le plantage

c) vous avez repéré la fonction ou ca plante
- break "le nom de la fonction"
- run
- step (plusieurs fois jusqu'a arriver a la fonction)

4) sortir de GDB:
a l'invité (gdb) taper: quit


5) Les principales fonctions a utiliser
Code:

backtrace    bt    indique où l'on se situe dans la pile des appels (synonyme de where)
break (M-x SPC) b    pose un point d'arrêt à une ligne définie par son numéro ou au début d'une fonction.
clear       cl    détruit tous les points d'arrêt sur une ligne ou dans une fonction
commands       définit une liste de commandes à effectuer automatiquement à un point d'arrêt
cond            ajoute une condition à un point d'arrêt
continue    c    continue l'exécution (après un point d'arrêt)
delete       d    détruit le point d'arrêt dont le numéro est donné
disable       désactive un point d'arrêt
disable disp       désactive un display
display       affiche la valeur d'une expression à chaque arrêt du programme
down            descend dans la pile des appels
enable            réactive un point d'arrêt
enable disp       réactive un display
file            redéfinit l'exécutable
finish            termine l'exécution d'une fonction
frame            permet de se placer à un endroit donné dans la pile des appels et affiche le contexte
help       h    fournit de l'aide à propos d'une commande
info breakpoints i b    affiche les points d'arrêt
info display         donne la liste des expressions affichées par des display
info func         affiche le prototype d'une fonction
next       n    exécute l'instruction suivante (sans entrer dans les fonctions)
run       r    lance l'exécution du programme (par défaut avec les arguments utilisés précédemment)
print       p    affiche la valeur d'une expression
ptype            détaille un type structure
quit       q    quitte gdb
set history expansion    active l'historique des commandes
set variable         modifie la valeur d'une variable
shell            permet d'exécuter des commandes shell
show args         affiche les arguments du programme
show values         réaffiche les 10 dernières valeurs affichées
step       s    exécute l'instruction suivante (en entrant dans les fonctions)
undisplay         supprime un display
up            monte dans la pile des appels
whatis            donne le type d'une expression
where            indique où l'on se situe dans la pile des appels (synonyme de backtrace)


6) quelques liens:

http://www-rocq.inria.fr/codes/Anne.Canteaut/COURS_C/gdb.html
http://www.linux-france.org/article/memo/node119.html
http://www.uqac.uquebec.ca/~flemieux/PRO100/gdbman.html
BlindMan
Modérateur


Inscrit le: 06 Avr 2002
Messages: 9959

MessagePosté le: Samedi 3 Avril 2004 12:49:01 Répondre en citantRevenir en haut de page

Beau boulot,
merci Pingus chinois qui dit merci
Mis en post-it
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web de l'utilisateur
e-nek
Dévelo K!TV XP


Inscrit le: 01 Mai 2002
Messages: 223

MessagePosté le: Samedi 3 Avril 2004 22:27:01 Répondre en citantRevenir en haut de page

Heu ... juste pour ceux qui sont fénéant comme moi : Utilisez DDD wink
http://www.gnu.org/software/ddd/

Vous obtiendrez le meme résultat sans meme regarder le "man".

1. Compilez xdtv (ou n'importe quel autre prog) en debug
2. ddd xawdecode
3. c'est tout

En cas de crash vous pouvez vous balader dans le code, voir le backtrace etc... avec une interface graphique assez complete.

A+
Voir le profil de l'utilisateurEnvoyer un message privé
BlindMan
Modérateur


Inscrit le: 06 Avr 2002
Messages: 9959

MessagePosté le: Samedi 3 Avril 2004 22:42:30 Répondre en citantRevenir en haut de page

C'est une GUI pour GDB, non?? sourit
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web de l'utilisateur
e-nek
Dévelo K!TV XP


Inscrit le: 01 Mai 2002
Messages: 223

MessagePosté le: Samedi 3 Avril 2004 22:46:49 Répondre en citantRevenir en haut de page

BlindMan a écrit:
C'est une GUI pour GDB, non?? sourit

Oui, mais en + pratique
Voir le profil de l'utilisateurEnvoyer un message privé
---pingus
Invité





MessagePosté le: Dimanche 4 Avril 2004 17:54:00 Répondre en citantRevenir en haut de page

je viens de tester : comment tu fais pour passer des "continue".
chez moi ca gel l'appli ddd au premier pb rencontré (j'utilise la version 3.3.6 fourni dans les contrib de la mandrake 9.2).

pingus
iraysyvalo
Posteur occasionnel


Inscrit le: 14 Aoû 2003
Messages: 44

MessagePosté le: Mercredi 25 Août 2004 17:24:09 Répondre en citantRevenir en haut de page

Bonjour a tous ..

Comment faire sur Debian ? J'ai installe XdTV normalement et j'aimerai passer en debug ... Merci d'avance schtroumpf

_________________
Il fait chauuuud .. ou est mon ventilo ?
Voir le profil de l'utilisateurEnvoyer un message privé
pingus
Dévelo XdTV (Linux)


Inscrit le: 21 Déc 2002
Messages: 194

MessagePosté le: Mercredi 25 Août 2004 19:33:32 Répondre en citantRevenir en haut de page

./configure --disable-nodebug
make
puis
src/xawdecode -v 2
pour llancer l'appli depuis le repertoire.
Voir le profil de l'utilisateurEnvoyer un message privé
depassage
Invité





MessagePosté le: Jeudi 26 Août 2004 12:58:38 Répondre en citantRevenir en haut de page

Et comment apt-get les sources .. ?
-pingus-
Invité





MessagePosté le: Jeudi 26 Août 2004 14:30:45 Répondre en citantRevenir en haut de page

??? je suis sous Mandrake alors, je connais pas debian.
désolé.
BlindMan
Modérateur


Inscrit le: 06 Avr 2002
Messages: 9959

MessagePosté le: Jeudi 26 Août 2004 15:12:08 Répondre en citantRevenir en haut de page

iraysyvalo a écrit:
Bonjour a tous ..

Comment faire sur Debian ? J'ai installe XdTV normalement et j'aimerai passer en debug ... Merci d'avance schtroumpf


Ben tu édites le fichier debian/rules pour passer l'option "--disable-nodebug" au 'configure'
(cherche, c'est dans les premières lignes)
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web de l'utilisateur
iraysyvalo
Posteur occasionnel


Inscrit le: 14 Aoû 2003
Messages: 44

MessagePosté le: Vendredi 3 Septembre 2004 23:32:39 Répondre en citantRevenir en haut de page

Je suppose que je dois faire un apt-src ...

J'ai pas eu de segfault avec le programme principal mais un p'tit pb avec un module audio (Exiting thread et bleme avec le support 8 bits qu'alsa n'a pas)... pas ma faute

En tout cas, j'ai eu la bonne surprise aujourd'hui que mon upgrade (meme si parfois ca fait ramer toute mon update) m'ait donne une jolie interface : je dis MERCI chinois qui dit merci Super boulot !!

Par ailleurs, j'poste ailleurs un petit retour sur l'interface ...

_________________
Il fait chauuuud .. ou est mon ventilo ?
Voir le profil de l'utilisateurEnvoyer un message privé
Montrer les messages depuis:      
Poster un nouveau sujetRépondre au sujet


 Sauter vers:   



Voir le sujet suivant
Voir le sujet précédent
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 200-2008 phpBB Group :: FI Theme :: Toutes les heures sont au format GMT + 1 Heure
Traduction par : phpBB-fr.com