Quelle est la différence entre les points d'arrêt matériels et logiciels?
Quelle est la différence entre les points d'arrêt matériels et logiciels?
Les points d'arrêt matériels sont-ils plus rapides que les points d'arrêt logiciels, si oui alors comment, et aussi pourquoi aurions-nous besoin des points d'arrêt logiciels?
7 réponses
Cet article fournit une bonne discussion des avantages et des inconvénients: http://www.nynaeve.net/?p=80
Pour répondre directement à votre question, les points d'arrêt logiciels sont plus flexibles car les points d'arrêt matériels sont limités dans certaines fonctionnalités et dépendent fortement de l'architecture. Un exemple donné dans l'article est que le matériel x86 a une limite de 4 points d'arrêt matériels.
Les points D'arrêt matériels sont plus rapides car ils ont des registres dédiés et moins de frais généraux que les logiciels les points d'arrêt.
Vous pouvez passer par gdb internes , Il explique très bien les points d'arrêt HW et SW.
Les points d'arrêt HW sont quelque chose qui nécessite le support de MCU. Les contrôleurs ARM ont des registres spéciaux où vous pouvez écrire un espace d'adressage, chaque fois que PC (program counter) = = SP register CPU s'arrête. Jtag est généralement nécessaire pour écrire dans ces registres spéciaux.
Les points de rupture SW sont implémentés dans GDB en insérant un piège, ou une Division illégale, ou une autre instruction qui provoquera une exception, puis quand il est rencontré, gdb prendra l'exception et arrêtera le programme. Lorsque l'utilisateur dit de continuer, gdb va restaurer l'instruction d'origine, en une seule étape, réinsérer le piège, et continuer sur.
L'utilisation des débogueurs HW par rapport aux débogueurs SW présente de nombreux avantages, surtout si vous avez affaire à des interruptions et à des périphériques de bus mémoire. Les interruptions AFAIK ne peuvent pas être déboguées avec des débogueurs logiciels.
Les points D'arrêt matériels sont en fait des comparateurs, comparant le PC actuel avec l'adresse dans le comparateur (lorsqu'il est activé). Les points d'arrêt matériels sont la meilleure solution pour définir des points d'arrêt. Généralement défini via la sonde de débogage (en utilisant JTAG, SWD, ...). L'inconvénient des points d'arrêt matériels: ils sont limités. Les processeurs n'ont qu'un nombre limité de points d'arrêt matériels (comparateurs). Le nombre de points d'arrêt matériels disponibles dépend du processeur. Bras 7/9 noyaux ont 2, moderne bras dispositifs (Cortex-M 0,3,4) entre 2 et 6, x86 habituellement 4.
Les points D'arrêt du logiciel sont en fait définis en remplaçant l'instruction à point d'arrêt par une instruction de point d'arrêt. L'instruction de point d'arrêt est présente dans la plupart des processeurs, et généralement aussi courte que l'instruction la plus courte, donc un seul octet sur x86 (0xcc, INT 3). Sur les processeurs Cortex-M, les instructions sont de 2 ou 4 octets, donc l'instruction de point d'arrêt est une instruction de 2 octets.
Les points D'arrêt du logiciel peuvent facilement être définis si le programme est situé dans la mémoire RAM (comme sur un PC). Beaucoup de systèmes embarqués ont le programme situé dans la mémoire flash. Ici, il n'est pas si facile d'échanger l'instruction, car le flash doit être reprogrammé, de sorte que les points d'arrêt matériels sont principalement utilisés. La plupart des sondes de débogage ne prennent en charge que les points d'arrêt matériels si le programme est situé dans la mémoire flash. Cependant, certains (tels que j-Link de SEGGER) permettent de reprogrammer la mémoire flash avec des instructions de point d'arrêt et aso permettent un nombre illimité de points d'arrêt (logiciels) même lorsque débogage d'un programme situé dans flash.
Plus d'informations sur les points d'arrêt logiciels dans la mémoire flash
En plus des réponses ci-dessus, il est également important de noter que si les points d'arrêt logiciels écrasent des instructions spécifiques dans le programme pour savoir où s'arrêter, le nombre plus limité de points d'arrêt matériels fait partie du processeur.
Justin Seitz dans son livre chapeau gris Python souligne que la différence importante ici est qu'en écrasant les instructions, les points d'arrêt du logiciel changent réellement le CRC du fichier, et donc n'importe quelle sorte de un programme tel qu'un logiciel malveillant qui calcule son CRC peut modifier son comportement en réponse aux points d'arrêt définis, alors qu'avec les points d'arrêt matériels, il est moins évident que le débogueur s'arrête et traverse certains morceaux de code.En bref, les points d'arrêt matériels utilisent des registres dédiés et sont donc limités en nombre. Ceux-ci peuvent être définis sur la mémoire volatile et non volatile.
Les points D'arrêt du logiciel sont définis en remplaçant l'opcode d'instruction dans la mémoire RAM par l'instruction de point d'arrêt. Ceux-ci peuvent être définis uniquement dans la mémoire RAM(Mémoire Flash n'est pas possible d'être écrit) et ne sont pas limités.
Cet article fournit une bonne explication sur les points d'arrêt.
Merci et égard, Shivakumar V W
Watchpoints sont un cas où la gestion du matériel est beaucoup plus rapide:
watch var
rwatch var
awatch var
Lorsque vous entrez ces commandes sur gdb 7.7 x86-64, Il est dit:
Hardware watchpoint 2: var
Cette capacité matérielle pour x86 est mentionnée à: http://en.wikipedia.org/wiki/X86_debug_register
C'est probablement possible en raison du circuit de pagination existant, qui gère chaque accès à la mémoire.
L'alternative "logiciel" est de une seule étape du programme , qui est très lent.
Comparez cela aux points d'arrêt réguliers, où au moins l'implémentation du logiciel insère et int3
instruction et permet au programme de s'exécuter, de sorte que vous ne payez que les frais généraux lorsqu'un point d'arrêt est atteint.
Quelques citations du document D'aide du Débogueur système Intel:
Points D'arrêt du matériel par rapport au Logiciel Le débogueur peut utiliser les deux matériels et les points d'arrêt logiciels, chacun d'entre eux a des forces et des faiblesses:
Les points D'arrêt Matériels sont implémentés à l'aide de l'architecture DRx registres de point d'arrêt décrits dans le SDM Intel. Ils ont l' avantage d'être utilisable directement à la réinitialisation, étant non volatile, et être utilisable avec flash ou autre mémoire en lecture seule. L'inconvénient est qu'ils sont une ressource limitée. les points D'arrêt du Logiciel nécessitent modification de la mémoire système telle qu'elle est implémentée en remplaçant opcode à l'emplacement souhaité avec une instruction spéciale. Cela rend ils sont une ressource illimitée, mais la dépendance de la mémoire signifie que vous ne pouvez pas installez-les avant le chargement d'un module en mémoire, et si le le logiciel cible écrase cette mémoire, puis ils deviendront invalides. En général, toute fonctionnalité de débogage doit être activé par le débogueur ne persiste pas après une réinitialisation, et peut être impacté après d'autres transitions de mode architectural telles que SMM entrée/sortie ou VM d'entrée/sortie. Exemples spécifiques:
CPU Reset effacera toutes les fonctionnalités de débogage, sauf pour reset break. Ce signifie par exemple que les points d'arrêt spécifiés par l'utilisateur ne seront pas valides jusqu'à ce que la cible s'arrête une fois après la réinitialisation. Notez que cet arrêt peut être en raison d'une pause de réinitialisation ou d'un arrêt initié par l'utilisateur. Dans dans les deux cas, le débogueur restaurera les fonctionnalités de débogage nécessaires. Entrée/sortie SMM désactivera / réactivera les points d'arrêt, cela signifie que vous impossible de spécifier un point D'arrêt dans SMRAM lorsqu'il est arrêté en dehors de SMRAM. Si vous souhaitez la pause dans SMRAM, vous devez d'abord vous arrêter au SMM entrée-pause et appliquer manuellement le point d'arrêt. Alternativement vous pouvez patcher le BIOS pour réactiver les points d'arrêt lors de la saisie de nécessite la possibilité de modifier le BIOS qui ne peut pas être utilisé dans production code.