7 votes

Comment puis-je parcourir les appels de fonctions imbriquées dans GDB ?

Parfois, je veux déboguer des fonctions comme celle-ci :

my_func1(my_func2(my_func3(val)));

Existe-t-il un moyen de parcourir cet appel imbriqué dans GDB ?

Je veux passer par ma_func3, puis ma_func2, puis ma_func1, etc.

8voto

hlovdal Points 11039

Quelle commande utilisez-vous ? next irait à la ligne suivante lors du débogage my_func1(my_func2(my_func3(val))); mais step doit entrer dans mon_func3. Exemple :

int my_func1(int i)
{
  return i;
}

int my_func2(int i)
{
  return i;
}

int my_func3(int i)
{
  return i;
}

int main(void)
{
  return my_func1(my_func2(my_func3(1)));
}

Débogué :

(gdb) b main
Breakpoint 1 at 0x4004a4: file c.c, line 19.
(gdb) run
Starting program: test

Breakpoint 1, main () at c.c:19
19    return my_func1(my_func2(my_func3(1)));
(gdb) step
my_func3 (i=1) at c.c:14
14    return i;
(gdb) step
15  }
(gdb) step
my_func2 (i=1) at c.c:9
9   return i;
(gdb) step
10  }
(gdb) step
my_func1 (i=1) at c.c:4
4   return i;
(gdb) step
5 }
(gdb) step
main () at c.c:20
20  }
(gdb) cont
Continuing.

Program exited with code 01.
(gdb)

1voto

Teja Points 121

Si vous savez où se trouve la définition de la fonction dans le code source, une solution consiste à placer un point d'arrêt dans cette fonction.

0voto

Adam Rosenfield Points 176408

Oui, bien que vous deviez vous salir les mains lors du démontage. Essayez d'abord le step commande (abréviation s ). Si cela ne vous met pas dans my_func3() essayez plutôt le stepi commande (abréviation si ) pour passer une instruction à la fois. Cela peut prendre plusieurs invocations, car il peut y avoir beaucoup d'instructions pour préparer les arguments de l'appel de fonction et nettoyer après.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X