web-dev-qa-db-fra.com

Programme reçu le signal SIGTRAP, traçage / interruption de point d'arrêt

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?

18
Randomblue

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.

10
TJD

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.

13
b1tchacked

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"

1
S.Seba