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.
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.
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)
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 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.