Je débogue un logiciel (intégré). J'ai défini un point d'arrêt sur une fonction, et pour une raison quelconque, une fois que j'ai atteint ce point d'arrêt et continue
je reviens toujours à la fonction (qui est une fonction d'initialisation qui ne doit être appelée qu'une seule fois). Lorsque je supprime le point d'arrêt et continue
, GDB me dit:
Program received signal SIGTRAP, Trace/breakpoint trap.
Puisque je travaillais avec des points d'arrêt, je suppose que je suis tombé dans un "piège de point d'arrêt". Qu'est-ce qu'un piège de point d'arrêt?
L'interruption de point d'arrêt signifie simplement que le processeur a atteint un point d'arrêt. Il y a deux possibilités pour expliquer pourquoi cela se produit. Très probablement, votre code d'initialisation est atteint car votre processeur est en train de réinitialiser et de frapper à nouveau le point d'arrêt. L'autre possibilité serait que le code où vous définissez le point d'arrêt soit réellement exécuté à des endroits autres que l'initialisation. Parfois, avec une optimisation agressive du compilateur, il peut être difficile de dire exactement à quel code vos points d'arrêt sont mappés et quels chemins d'exécution peuvent y arriver.
L'autre possibilité à laquelle je peux penser est:
1.Votre processus est en cours d'exécution plusieurs threads.
Par exemple - 2, dites x & y.
2 .Le fil y atteint le point de rupture mais vous avez attaché gdb au fil x.
Ce cas est un piège de trace/point d'arrêt.
J'ai rencontré ce problème lors de l'exécution du projet Linux dans Visual studio 2015 et du débogage à distance. Ma solution est project_properties -> Propriétés de configuration -> Debugging -> Debugging mode et changez la valeur de "gdbserver" en "gdb"