web-dev-qa-db-fra.com

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 logiciels? Si oui, comment et pourquoi aurions-nous besoin des points d'arrêt logiciels?

25
Aquarius_Girl

Cet article fournit une bonne discussion sur les avantages et les inconvénients: http://www.nynaeve.net/?p=80

Pour répondre directement à votre question, les points d'arrêt logiciels sont plus flexibles car ils 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 temps système que les points d'arrêt logiciels.

23
SpliFF

Vous pouvez passer par Les composants internes de la base de données , cela explique très bien les points de rupture matériel et logiciel.

Les points d'arrêt matériels sont quelque chose qui nécessite le support de MCU. Les contrôleurs ARM ont des registres spéciaux dans lesquels vous pouvez écrire un espace adresse, chaque fois que PC (compteur de programme) == sp registre CPU s’arrête. Jtag est généralement obligé d'écrire dans ces registres spéciaux.

Les points de rupture SW sont implémentés dans GDB en insérant un piège, une division illégale ou une autre instruction susceptible de provoquer une exception. Lorsque cela se produit, gdb prend l’exception et arrête le programme. Lorsque l'utilisateur dit de continuer, gdb rétablit l'instruction d'origine, en une seule étape, réinsère l'interruption et continue.

L'utilisation de débogueurs matériels par rapport aux débogueurs logiciels présente de nombreux avantages, en particulier si vous traitez avec des interruptions et des périphériques de bus de mémoire. Les interruptions AFAIK ne peuvent pas être déboguées avec des débogueurs de logiciels.

14
Kamath

Les points d'arrêt matériels sont en réalité des comparateurs, comparant le PC actuel à l'adresse du comparateur (si elle est activée). 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 (à l'aide de JTAG, SWD, ...). L'inconvénient des points d'arrêt matériels: ils sont limités. Les CPU 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 de la CPU. ARM Les cœurs 7/9 ont 2 dispositifs modernes ARM (Cortex-M 0,3,4) compris entre 2 et 6, X86 généralement 4.

Les points d'arrêt logiciels sont en fait définis en remplaçant l'instruction à traiter 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 CPU Cortex-M, les instructions sont de 2 ou 4 octets, ainsi, l'instruction de point d'arrêt est une instruction de 2 octets.

Les points d'arrêt logiciels peuvent facilement être définis si le programme est situé dans RAM (sur un PC, par exemple). Beaucoup de systèmes intégrés ont le programme situé dans la mémoire flash. Dans ce cas, il n’est pas facile d’échanger l’instruction car le flash doit être reprogrammé; les points de rupture matériels sont donc 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 (comme J-Link de SEGGER) autorisent la reprogrammation de la mémoire flash avec une instruction de point d'arrêt et autorisent également un nombre illimité de points d'arrêt (logiciels) même lors du débogage d'un programme situé en flash.

Plus d'informations sur les points d'arrêt logiciels dans la mémoire flash

12
Rolf

Outre les réponses ci-dessus, il est également important de noter que, même 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 en réalité partie du processeur.

Justin Seitz dans son livre Python Gris souligne que la différence importante est que, en écrasant les instructions, les points d'arrêt logiciels changent en fait le CRC du fichier, et ainsi de suite. Une sorte de programme, tel qu'un malware qui calcule son CRC, peut changer de comportement en réponse à la définition de points d'arrêt. Tandis que pour les points d'arrêt matériels, il est moins évident que le débogueur s'interrompt et parcourt certaines parties de code.

4
a10y

En résumé, les points d'arrêt matériels utilisent des registres dédiés et sont donc en nombre limité. Celles-ci peuvent être définies à la fois sur la mémoire volatile et non volatile. 

Les points d'arrêt logiciels sont définis en remplaçant le code opération d'instruction dans la mémoire RAM par une instruction de point d'arrêt. Celles-ci ne peuvent être définies que dans la mémoire RAM (la mémoire Flash ne peut pas être écrite) et ne sont pas limitées.

Cet article fournit une bonne explication sur les points d'arrêt.

Merci et salutations, Shivakumar V W

1
Shivakumar

Watchpoints est un cas où la manipulation 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 écrit:

Hardware watchpoint 2: var

Cette capacité matérielle pour x86 est mentionnée à l’adresse: http://fr.wikipedia.org/wiki/X86_debug_register

Cela est probablement possible grâce au circuit de radiomessagerie existant, qui gère chaque accès à la mémoire.

L'alternative "logiciel" consiste à exécuter le programme en une seule étape , qui est très lent.

Comparez cela aux points d'arrêt habituels, où au moins la mise en œuvre logicielle insère et l'instruction int3 et laisse le programme s'exécuter, de sorte que vous ne payez que le temps système requis lorsqu'un point d'arrêt est atteint.

Quelques citations de la documentation d’aide Intel System Debugger:

Points d'arrêt matériels/logiciels Le débogueur peut utiliser les deux matériels et des points d’arrêt logiciels, chacun de ces éléments ayant ses points forts et ses points faibles:

Les points d'arrêt matériels sont implémentés à l'aide de l'architecture DRx registres de points d'arrêt décrits dans Intel SDM. Ils ont le avantage d'être utilisable directement lors de la réinitialisation, d'être non volatile, et être utilisable avec flash ou autre mémoire en lecture seule. L'inconvénient est qu'ils sont une ressource finie. Points d'arrêt logiciels require modifier la mémoire système au fur et à mesure de leur implémentation en remplaçant le fichier opcode à l'emplacement souhaité avec une instruction spéciale. Cela fait leur une ressource illimitée, mais la dépendance de la mémoire signifie que vous ne pouvez pas installez-les avant de charger un module en mémoire, et si le le logiciel cible écrase cette mémoire, elle devient alors invalide . En général, toute fonctionnalité de débogage devant être activée par le débogueur ne persiste pas après une réinitialisation et peut être affecté après un autre transitions de mode architectural telles que SMM entry/exit ou VM entrée/sortie. Des exemples spécifiques incluent:

La réinitialisation de la CPU effacera toutes les fonctionnalités de débogage, à l'exception de la pause de réinitialisation. 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 soit en raison d'une pause de réinitialisation, soit en raison 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 . L'entrée/sortie SMM désactive/réactive les points d'arrêt, ce qui signifie que vous ne peut pas spécifier un point d'arrêt dans SMRAM lorsqu'il est arrêté en dehors de SMRAM. Si vous souhaitez la pause au sein de SMRAM, vous devez d’abord vous arrêter au SMM entry-break et appliquez manuellement le point d'arrêt. Sinon, vous pouvez corrige le BIOS pour réactiver les points d'arrêt lors de la saisie de SMM, mais ceci nécessite la possibilité de modifier le BIOS qui ne peut pas être utilisé dans code de production.

0
smwikipedia