web-dev-qa-db-fra.com

Point d'arrêt C ++ GDB pour les fonctions membres

J'ai du mal à utiliser GDB sur mon programme c ++. Je veux mettre en place un point d'arrêt pour ma fonction membre de classe et je ne suis pas sûr de la syntaxe de la façon de le faire. Mon programme fonctionne en ce moment et j'essaie juste d'apprendre à utiliser GDB. Mon problème est que toutes les informations que je trouve en ligne ne concernent vraiment qu'un fichier principal () et aucune autre fonction ou classe et si elles impliquent des classes, elles n'utilisent qu'une fonction avec une instruction de retour void.

J'ai une classe d'arbre de recherche binaire. Je veux définir un point d'arrêt sur une fonction de mon programme. voici la section de mon fichier d'en-tête.

class BST
{
    BST()
    ...
    private:
    int add((BST * root, BST *src);
}

Je suis telneting dans un serveur Linux en ligne de commande pour l'école. Je peux faire fonctionner GDB avec mon programme très bien avec g ++ -g * .cpp (il y a d'autres fichiers qui fonctionnent bien) et le fichier est enregistré en tant que a.out. Je lance GDB avec

gdb ./a.out

et j'entre dans GDB. Je peux obtenir un point d'arrêt pour la fonction d'affichage vide avec

b BST::disp_block()

mais comment puis-je le faire avec la fonction d'ajout que j'ai essayé

b BST::int add(BST*, BST *)
b int BST::add(BST*, BST *)
b BST::add(BST*, BST *)

et j'ai même essayé avec les noms des arguments

b BST::int add(BST * root, BST * src)
b int BST::add(BST * root, BST * src)
b BST::add(BST * root, BST * src)

et je continue de recevoir l'erreur

Function "____" not defined.
Make break point pending on future shared library load? (y or [n])

Comment configurer un point d'arrêt pour une fonction membre comme celle-ci? Je suppose que les points de surveillance auraient le même format, sinon pourriez-vous l'expliquer aussi.

16
user3543461

Comme l'a dit Dark Falcon, break BST::add devrait fonctionner si vous n'avez pas de surcharge.

Vous pouvez également taper:

(gdb) break 'BST::add(<TAB>

(notez la citation unique). Cela devrait inciter GDB à effectuer la tabulation et terminer la ligne comme suit:

(gdb) break 'BST::add(BST*, BST*)

et à quel point vous pouvez ajouter la terminaison ' 'et appuyez sur Entrée pour ajouter le point d'arrêt.

Je peux obtenir un point d'arrêt pour la fonction d'affichage vide

Le type de retour de fonction ne fait pas partie de sa signature et a rien à voir avec ce qui se passe.

20
Employed Russian

Vous devrez peut-être spécifier l'espace de noms s'il est défini pour la classe. S'il est différent de l'espace de noms standard std. Le nom de fichier est facultatif, si vous exécutez le bon binaire. Vous pouvez vérifier si le symbole existe sur l'exécutable via. Commande "nm -C", où -C gère le changement de nom pour C++.

Donc, pour résumer avec un exemple: si l'espace de noms est "mySpace" et la classe est "X" dont le membre est "Y", alors le point d'arrêt devrait être comme celui ci-dessous, "(gdb) b mySpace :: X :: Y "

4
Atul Soni