C++ GDB point d'arrêt pour les fonctions de membre
J'ai de la difficulté avec l'utilisation de GDB sur mon programme en c++. Je veux mettre en place un point de rupture pour ma fonction de membre de classe et je ne suis pas sûr de la syntaxe de la façon de le faire. Mon programme de travail à trouver, et je suis juste en train d'apprendre à utiliser GDB. Mon problème est que toutes les informations que j'ai trouver sur la ligne n'est vraiment traite avec juste une main() du fichier et pas d'autres fonctions ou de classes et si elles impliquent des classes ses seulement à l'aide d'une fonction avec un vide de l'instruction return.
J'ai un arbre de recherche binaire de la classe. Je veux mettre un point d'arrêt à une fonction dans mon programme.
voici la partie de mon fichier d'en-tête.
class BST
{
BST()
...
private:
int add((BST * root, BST *src);
}
Je suis telneting dans une ligne de commande du serveur linux pour l'école.
Je peux obtenir GDB en cours d'exécution avec mon programme bien avec g++ -g *.rpc (il y a d'autres fichiers qui fonctionnent très bien), et le fichier est enregistré en tant que..
J'ai lancer GDB avec
gdb ./a.out
et je reçois dans GDB. Je peux obtenir un point de rupture pour le vide, la fonction d'affichage de l'amende juste avec
b BST::disp_block()
mais comment puis-je le faire avec la fonction add, 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 d'argument
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 reçois l'erreur
Function "____" not defined.
Make break point pending on future shared library load? (y or [n])
Comment puis-je configurer un point de rupture pour une fonction membre comme celui-ci? Im en supposant des points de surveillance serait le même format, si non pourriez-vous expliquer que trop.
b BST::add
. Pas besoin d'arguments. Notez que vous devez inclure l'espace de noms aussi, si votre classe est dans un espace de noms.Il est également possible de définir un point d'arrêt dans la via gdb nom de fichier:linenumber. Si votre fonction est dans la bst.c, ligne 25, la commande serait: (gdb) b bst.c:25
OriginalL'auteur user3543461 | 2016-03-04
Vous devez vous connecter pour publier un commentaire.
Aussi Sombre Falcon dit,
break BST::add
devrait fonctionner si vous n'avez pas de surcharges.Vous pouvez également taper:
(notez les guillemets simples). Cela devrait inciter GDB pour effectuer l'onglet de l'achèvement et de finition de la ligne comme ceci:
et à quel point vous pouvez ajouter la terminaison
'
" et appuyez sur Enter pour ajouter le point d'arrêt.Type de retour de fonction ne fait pas partie de sa signature et a rien à voir avec ce qui se passe.
info func
avec une regexp argument de trouver ce gdb pense qu'une fonction peut être nommé.Remarque le symbole doit être entièrement de l'espace de noms qualifiés onglet avant-achèvement des travaux.
OriginalL'auteur Employed Russian
Vous pouvez avoir besoin de spécifier l'espace de noms si tout défini pour la classe. Si d'autres que la norme de l'espace de noms std. Le nom de fichier est facultatif, si vous exécutez le bon binaire. Vous pouvez vérifier si le symbole existe sur le fichier exécutable via. "nm -C de la commande", où -C gère name mangling pour le C++.
Donc, pour résumer avec un Exemple: Si l'espace de noms est "mySpace" et la classe "X" dont un des membres est "Y", alors le point d'arrêt doit être comme celui-ci, "(gdb) b mySpace::X::Y"
OriginalL'auteur Atul Soni