| 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: 9976
 
 
   | 
|  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: 9976
 
 
   | 
|  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: 9976
 
 
   | 
|  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 ?
 |  | 
|   | 
|  | 
|  |