2014-04-16 1 views
1

J'écris gdbstub pour ARM et j'ai une question. J'essaie d'implémenter des points de contrôle pour mon talon. GDB a des paquets spéciaux pour différents types de watchpoins (lecture, écriture, accès), mais chaque fois que je définis un watchpoint à certaines valeurs, j'ai implémenté GDB - en faisant un pas à travers le code et en comparant les valeurs à chaque étape. C'est spécifié dans la documentation de GDB, mais alors pourquoi avez-vous besoin d'un paquet spécial pour écrire des points de surveillance?GDB watchpoint implementation

Évidemment, l'implémentation native de GDB est lente. Ce paquet peut être nécessaire pour redéfinir l'implémentation. Par exemple, quand je mets wp à addr, pas de valeur, le paquet Z2 est vraiment envoyé. Mais je ne comprends pas comment GDB devrait comprendre que le "S05" (paquet d'arrêt) a été envoyé à cause d'un point de contrôle.

Dans les points d'arrêt, la décision est prise sur la comparaison entre le courant bp_address et la valeur du compteur de programme.

Comment cela fonctionne-t-il avec les points de surveillance?

Répondre

0

Lorsque j'ai essayé avec gdbserver + gdb sur la machine linux x86-64, gdbserver a répondu avec paquet T, dans laquelle il a déclaré: "regarder" comme raison de l'arrêt:

paquet reçu: T05watch: 000000000058c460; 06: 00deffffff7f0000; 07: f0ddffffff7f0000; 10: 9cd4410000000000; thread: p3425.3425; noyau: 5;