Quelle est la différence entre les points d'arrêt matériels et logiciels ?
Les points d'arrêt matériels sont censés être plus rapides que les points d'arrêt logiciels. Si oui, comment, et pourquoi aurions-nous besoin des points d'arrêt logiciels ?
Quelle est la différence entre les points d'arrêt matériels et logiciels ?
Les points d'arrêt matériels sont censés être plus rapides que les points d'arrêt logiciels. Si oui, comment, et pourquoi aurions-nous besoin des points d'arrêt logiciels ?
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 est limité à 4 points d'arrêt matériels.
Les points d'arrêt matériels sont plus rapides parce qu'ils ont des registres dédiés et moins de surcharge que les points d'arrêt logiciels.
Les points d'arrêt matériels sont en fait des comparateurs, qui comparent le PC actuel avec l'adresse du comparateur (lorsqu'il est activé). Les points d'arrêt matériels sont la meilleure solution pour définir des points d'arrêt. Ils sont généralement définis 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 CPU ne disposent que d'un nombre limité de points d'arrêt matériels (comparateurs). Le nombre de points d'arrêt matériels disponibles dépend de l'unité centrale. Les cœurs ARM 7/9 en ont 2, les dispositifs ARM modernes (Cortex-M 0,3,4) 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 à pointer par une instruction de point d'arrêt. L'instruction de point d'arrêt est présente dans la plupart des CPU, et généralement aussi courte que l'instruction la plus courte, donc seulement un octet sur x86 (0xcc, INT 3). Sur les CPU Cortex-M, les instructions sont de 2 ou 4 octets, l'instruction de point d'arrêt est donc une instruction de 2 octets.
Les points d'arrêt logiciels peuvent facilement être définis si le programme se trouve en RAM (comme sur un PC). Dans de nombreux systèmes embarqués, le programme est situé dans une mémoire flash. Dans ce cas, il n'est pas si facile d'échanger l'instruction, car la mémoire flash doit être reprogrammée, c'est pourquoi on utilise principalement des points d'arrêt matériels. La plupart des sondes de débogage ne supportent que les points d'arrêt matériels si le programme est situé dans la mémoire flash. Cependant, certaines (comme la sonde J-Link de SEGGER) permettent de reprogrammer la mémoire flash avec une instruction de point d'arrêt et autorisent un nombre illimité de points d'arrêt (logiciels), même lors du débogage d'un programme situé dans la mémoire flash.
Plus d'informations sur les points d'arrêt logiciels en mémoire flash
Vous pouvez passer par Internes de GDB 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 du MCU. Les contrôleurs ARM ont des registres spéciaux dans lesquels vous pouvez écrire un certain espace d'adresse, lorsque PC (compteur de programme) == sp registre CPU s'arrête. Le Jtag est généralement nécessaire pour écrire dans ces registres spéciaux.
Les points d'arrêt SW sont implémentés dans GDB par l'insertion d'un piège, d'une division illégale, ou d'une autre instruction qui causera une exception, et quand elle est rencontrée, gdb prendra l'exception et arrêtera le programme. Lorsque l'utilisateur demande de continuer, gdb rétablit l'instruction originale, en une seule étape, réinsère le piège et continue.
Il y a beaucoup d'avantages à utiliser des débogueurs HW plutôt que des débogueurs SW, surtout si vous avez affaire à des interruptions et à des dispositifs de bus mémoire. A ce jour, les interruptions ne peuvent pas être déboguées avec des débogueurs logiciels.
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 en fait partie du processeur.
Justin Seitz dans son livre Gray Hat Python fait remarquer que la différence importante ici est qu'en écrasant les instructions, les points d'arrêt logiciels modifient en fait l'interface de l'ordinateur. CRC Ainsi, tout type de programme, tel qu'un logiciel malveillant qui calcule son CRC, peut modifier son comportement en réponse à la mise en place de points d'arrêt, alors qu'avec les points d'arrêt matériels, il est moins évident que le débogueur s'arrête et parcourt 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. Ils peuvent être définis sur la mémoire volatile et non volatile.
Les points d'arrêt logiciels sont définis en remplaçant l'opcode de l'instruction dans la mémoire RAM par une instruction de point d'arrêt. Ils peuvent être définis uniquement dans la mémoire RAM (la mémoire Flash ne peut pas être écrite) et ne sont pas limités.
Cet article fournit de bonnes explications sur les points d'arrêt.
Merci et salutations, Shivakumar V W
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.