GDB : debuging program

D’abord pour pouvoir être “debugeable”, un programme doit être compilé avec le mode “debug information”.
Et pour compiler avec le mode debug,  avec gcc il faut faire :
gcc -g <program>.c -o <program>
g : indique le mode debug
o: indique le fichier de sortie du programme

GDB pour débuger un programme

Syntaxe : gdb <nom_program>
Il est aussi possible de lancer gdb sans argument, puis une fois à l’intérieur tapez la commande file <program> pour charger le programme.

[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]

#gdb
file 

[/pastacode]

GDB pour analyser un fichier core

Un fichier core  est une image mémoire d’un procéssus qui s’est crashé. Il contient les informations permettant de debbuger qui ont été collectées lors du crash: contenu des registres, status des process status et données.
Le fichier core est généré par un appel à la fonction abort().
GDB charge le fichier core et permet d’examiner le programme avant son crash.

Syntaxe : gdb <programme> fichier_core
Exemple : gdb /bin/perl core.12345

Quelques commandes GDB
  • run : lancer le programme
  • bt : ou backtrace, permet de savoir où s’est arrêté le programme. Le résultat est afficher sous forme de frame.

[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]

#(gdb) bt
#0  0x80483ea in wib (no1=8, no2=8) at eg1.c:7
#1  0x8048435 in main (argc=1, argv=0xbffff9c4) at eg1.c:21

[/pastacode]

  • frame <num_frame> : affiche le contenu d’un frame. Le numero d’un frame est retourné par la commande “bt”
  • break : ajouter un breakpoint sur une ligne particulier ou sur une fonction. Une fois lancé, gbb s’arrête à ce breakpoint.

[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]

#(gdb) break 21
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x08048428 in main at eg1.c:21
stop only if value == div
breakpoint already hit 1 time

[/pastacode]

  • info break : affiche les informations sur les breakpoint.

[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]

#(gdb)info break
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x08048428 in main at eg1.c:21
stop only if value == div
breakpoint already hit 1 time

[/pastacode]

  • info functions : affiche toutes les fonctions du programme

 

[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]

#(gdb) info functions
All defined functions:

Non-debugging symbols:
0x10000150  __start
0x10000228  __threads_init
0x10000340  call_pth_init
0x10000390  __pth_init
0x100003b8  __mod_init
0x100003e0  main
0x100005a0  xs_init
0x10000620  signal
0x10000648  pthread_atfork

[/pastacode]

  • info frame : voir l’état du programme

[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]

#info frame
Stack level 0, frame at 0x2ff22740:
pc = 0xd01290f8 in extend_brk; saved pc 0x5d
Arglist at 0x2ff22740, args:
Locals at 0x2ff22740, Previous frame's sp in r1
Saved registers:
r25 at 0xffffffe4, r26 at 0xffffffe8, r27 at 0xffffffec, r28 at 0xfffffff0, r29 at 0xfffffff4,
r30 at 0xfffffff8, r31 at 0xfffffffc, lr at 0x8

[/pastacode]

  • info sharedlibrary : lister les adresses des librairies partagés

[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]

#(gdb) info sharedlibrary
Text Range              Data Range              Syms    Shared Object Library
0xd1a78180-0xd1a7de90   0xf05dc8e8-0xf05dcfcc   Yes     /usr/opt/perl5/lib/5.8.8/aix-thread-multi/auto/File/Glob/Glob.so
0xd1a6c180-0xd1a73969   0xf05d7ee0-0xf05d91d4   Yes     /usr/opt/perl5/lib/5.8.8/aix-thread-multi/auto/Socket/Socket.so
0xd0548280-0xd055cf51   0xf06bdf40-0xf06c83f0   Yes     /usr/lib/libiconv.a(shr4.o)
0xd053a280-0xd0547801   0xf06c9e20-0xf06cb13c   Yes     /usr/lib/libi18n.a(shr.o)
0xd0532124-0xd0534d75   0xd0536128-0xd053845c   Yes     /usr/lib/nls/loc/en_US
0xd05c1ae0-0xd05c2080   0xf0292d70-0xf0292e60   Yes     /usr/lib/threads/libc.a(pse.o)

[/pastacode]

Plus d’informations ici

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *