GNU/Linux >> Tutoriels Linux >  >> Linux

Point d'arrêt conditionnel GDB sur des types arbitraires tels que C++ std ::égalité de chaîne

Existe-t-il un moyen de définir un point d'arrêt conditionnel sur des types non primitifs ?

Oui, une façon de le faire est de convertir un type non primitif en un type primitif, dans votre cas en char* , et utilisez strcmp pour comparer des chaînes.

condition 1 strcmp(myObject->myStringVar.c_str(),"foo") == 0

La réponse à votre question que vous avez posée est oui ... dans le cas général, cela fonctionne pour les classes et fonctions arbitraires et les fonctions membres de classe. Vous n'êtes pas obligé de tester les types primitifs. Surcharges de membres de classe, comme operator== , devrait fonctionner.

Mais je suppose que le problème avec ce cas a à voir avec le operator== pour std ::string étant une surcharge globale d'opérateur basé sur un modèle :

http://www.cplusplus.com/reference/string/operators/

Ainsi, les déclarations sont du type :

template<class charT, class traits, class Allocator>
    bool operator==(const basic_string<charT,traits,Allocator>& rhs,
                const charT* lhs );

Je ne serais pas surpris que gdb ne sache pas comment faire le lien pour vous.

Notez qu'en plus de ce que @ks1322 a dit, vous pouvez rester dans le domaine C++ et utiliser plus simplement std::string::compare():

condition 1 myObject->myStringVar.compare("foo") == 0

Linux
  1. Erreur de segmentation SIGSEGV étrange dans la méthode std ::string ::assign () de libstdc ++.so.6

  2. Comment trouver le chemin complet du programme Linux C++ de l'intérieur ?

  3. linux bash, chaîne de casse camel à séparer par un tiret

  4. Interface de ligne de commande C++

  5. Supprimez tous les caractères spéciaux et la casse de la chaîne dans bash

5 conseils pour le débogueur GNU

Comment trouver un fichier dont le nom comprend une chaîne donnée, telle que "abcde" ?

Examen des statistiques de mémoire de tas C/C++ dans gdb

Comment créer un répertoire temporaire en C++ ?

Comment utiliser GDB dans Eclipse pour le débogage C/C++ ?

sys/types.h :aucun fichier ou répertoire de ce type