J'essaie d'utiliser GDB pour déboguer mon programme C ++.
Je pense qu'il est possible de passer des arguments à une fonction tout en utilisant GDB.
Par exemple, j'ai un tel programme comme ci-dessous:
#include <iostream> void func(int a) { std::cout << a << std::endl; } int main(int argc, char **argv) { func(2222); return EXIT_SUCCESS; }
J'ai mis un point d'arrêt à la ligne func (2222)
dans la fonction main
. Ma question est: est-il possible de définir un autre argument pour la fonction func
, au lieu de 2222
, tout en utilisant GDB sur ce programme?
3 Réponses :
Vous pouvez modifier la valeur a dans la fonction func ())
.
Pour cela, vous pouvez utiliser:
b func # set breakpoint c # continue assign a = 2 # breakpoint gets hit, change value from a = 222 to a = 2
Exemple
assign a = $value_you_want
Oui. Vous pouvez évaluer les expressions lors du débogage. Vous pouvez utiliser call
ou print
, mais l'expression doit être connue au moment du point d'arrêt.
Dans votre exemple, vous pourriez faire :
gdb ./test (gdb) b main ... (gdb) r ... (gdb) call func(11) 11
Plus d'informations sur l'appel / l'impression: https://sourceware.org/gdb/onlinedocs/gdb/Calling.html
Je ne pense pas qu'il soit possible de changer la valeur passée à la fonction avant l'appel de func (2222)
. Cependant, vous pouvez modifier les valeurs du paramètre après que GDB est entré dans la fonction, avant une autre exécution de code.
Ma façon préférée de déboguer avec GDB est dans Visual Studio Code, il fournit une interface graphique en plus de toutes les commandes GDB et facilite grandement l'utilisation du débogage avancé de GDB. Et vous pouvez définir une nouvelle valeur pour la variable simplement en cliquant dessus. Vous pouvez voir un exemple ci-dessous.