Auteur |
Message |
--pingus
Invité
|
Posté le:
Samedi 3 Avril 2004 12:40:44 |
|
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: 9979
|
Posté le:
Samedi 3 Avril 2004 12:49:01 |
|
Beau boulot,
merci Pingus
Mis en post-it |
|
|
|
|
e-nek
Dévelo K!TV XP
Inscrit le: 01 Mai 2002
Messages: 223
|
Posté le:
Samedi 3 Avril 2004 22:27:01 |
|
Heu ... juste pour ceux qui sont fénéant comme moi : Utilisez DDD
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+ |
|
|
|
|
BlindMan
Modérateur
Inscrit le: 06 Avr 2002
Messages: 9979
|
Posté le:
Samedi 3 Avril 2004 22:42:30 |
|
C'est une GUI pour GDB, non?? |
|
|
|
|
e-nek
Dévelo K!TV XP
Inscrit le: 01 Mai 2002
Messages: 223
|
Posté le:
Samedi 3 Avril 2004 22:46:49 |
|
BlindMan a écrit: |
C'est une GUI pour GDB, non?? |
Oui, mais en + pratique |
|
|
|
|
---pingus
Invité
|
Posté le:
Dimanche 4 Avril 2004 17:54:00 |
|
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
|
Posté le:
Mercredi 25 Août 2004 17:24:09 |
|
Bonjour a tous ..
Comment faire sur Debian ? J'ai installe XdTV normalement et j'aimerai passer en debug ... Merci d'avance |
_________________ Il fait chauuuud .. ou est mon ventilo ? |
|
|
|
pingus
Dévelo XdTV (Linux)
Inscrit le: 21 Déc 2002
Messages: 194
|
Posté le:
Mercredi 25 Août 2004 19:33:32 |
|
./configure --disable-nodebug
make
puis
src/xawdecode -v 2
pour llancer l'appli depuis le repertoire. |
|
|
|
|
depassage
Invité
|
Posté le:
Jeudi 26 Août 2004 12:58:38 |
|
Et comment apt-get les sources .. ? |
|
|
|
|
-pingus-
Invité
|
Posté le:
Jeudi 26 Août 2004 14:30:45 |
|
??? je suis sous Mandrake alors, je connais pas debian.
désolé. |
|
|
|
|
BlindMan
Modérateur
Inscrit le: 06 Avr 2002
Messages: 9979
|
Posté le:
Jeudi 26 Août 2004 15:12:08 |
|
iraysyvalo a écrit: |
Bonjour a tous ..
Comment faire sur Debian ? J'ai installe XdTV normalement et j'aimerai passer en debug ... Merci d'avance |
Ben tu édites le fichier debian/rules pour passer l'option "--disable-nodebug" au 'configure'
(cherche, c'est dans les premières lignes) |
|
|
|
|
iraysyvalo
Posteur occasionnel
Inscrit le: 14 Aoû 2003
Messages: 44
|
Posté le:
Vendredi 3 Septembre 2004 23:32:39 |
|
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)...
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 Super boulot !!
Par ailleurs, j'poste ailleurs un petit retour sur l'interface ... |
_________________ Il fait chauuuud .. ou est mon ventilo ? |
|
|
|
|