1
votes

Comment passer des arguments à une fonction pendant GDB

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?


0 commentaires

3 Réponses :


3
votes

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 


0 commentaires

2
votes

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


0 commentaires

0
votes

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.

 entrez la description de l'image ici entrez la description de l'image ici


0 commentaires