Puis-je spécifier que je veux que gdb coupe à la ligne x lorsque char* x
pointe vers une chaîne dont la valeur est égale "hello"
? Si oui, comment?
c
debugging
gdb
conditional-breakpoint
341008
la source
la source
strncmp
etstrstr
sont d'autres fonctions de requête C utiles.Réponses:
Vous pouvez utiliser
strcmp
:20
est le numéro de ligne,x
peut être n'importe quel nom de fichier ety
peut être n'importe quelle variable.la source
No symbol "strcmp" in current context.
run
pour cela pour que les bibliothèques dynamiques soient chargées. Pour la source, recherchez-la sur Google et trouvez: stackoverflow.com/questions/10000335/… :-)$_streq
La méthode de @tlwhitec est meilleure.Sur certaines implémentations, gdb peut ne pas connaître le type de retour de strcmp. Cela signifie que vous devrez lancer un casting, sinon il serait toujours évalué à vrai!
la source
Depuis GDB 7.5, vous pouvez utiliser ces fonctions pratiques natives :
Cela semble bien moins problématique que d'avoir à exécuter un "étranger"
strcmp()
sur la pile du processus à chaque fois que le point d'arrêt est atteint. Cela est particulièrement vrai pour le débogage des processus multithreads.Pour votre cas de démonstration, l'utilisation serait
ou, si votre point d'arrêt existe déjà et que vous souhaitez simplement y ajouter la condition
$_streq
ne correspond qu'à la chaîne entière, donc si vous voulez quelque chose de plus rusé, vous devriez utiliser$_regex
, qui prend en charge la syntaxe d'expression régulière Python .la source