51 votes

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 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 ?

3voto

Ciro Santilli Points 3341

Les points de surveillance sont ceux qui font la différence.

Il s'agit d'un cas où le traitement matériel est beaucoup plus rapide :

watch var
rwatch var
awatch var

Lorsque vous entrez ces commandes dans GDB 7.7 x86-64, le message suivant apparaît :

Hardware watchpoint 2: var

Cette capacité matérielle pour x86 est mentionnée à : http://en.wikipedia.org/wiki/X86_debug_register

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

L'alternative "logicielle" consiste à étape unique le programme qui est très lent.

Comparez cela aux points d'arrêt classiques, où au moins l'implémentation du logiciel injecte un int3 au point d'arrêt et laisse le programme s'exécuter, de sorte que vous ne payez des frais généraux que lorsqu'un point d'arrêt est atteint.

3voto

Umberto Points 21

Les points d'arrêt logiciels placent une instruction en RAM qui est exécutée comme un TRAP lorsque votre programme atteint cette adresse.

Alors que les points d'arrêt matériels utilisent un registre du processeur pour mettre en œuvre le point d'arrêt lui-même. C'est pourquoi les points d'arrêt matériels sont beaucoup plus rapides. Et c'est pourquoi nous avons besoin de points d'arrêt logiciels : les points d'arrêt matériels sont limités au nombre de registres du processeur dédiés aux points d'arrêt.

Je l'ai appris au travail aujourd'hui :)

2voto

smwikipedia Points 5491

Quelques citations du document d'aide de Intel System Debugger :

Points d'arrêt matériels et logiciels Le débogueur peut utiliser à la fois le matériel et les points d'arrêt logiciels, chacun d'entre eux ayant des points forts et des points faibles :

Points d'arrêt matériels sont mises en œuvre en utilisant l'architecture DRx décrits dans le SDM d'Intel. Ils ont l'avantage d'être l'avantage d'être utilisables directement à la réinitialisation, d'être non-volatils être utilisables avec une mémoire flash ou une autre mémoire morte. L'inconvénient est que est qu'ils sont une ressource limitée. Points d'arrêt du logiciel nécessitent modifier la mémoire du système car elles sont mises en œuvre en remplaçant l'opcode à l'emplacement souhaité par une instruction spéciale. opcode à l'emplacement souhaité par une instruction spéciale. Cela en fait ressource illimitée, mais la dépendance à la mémoire signifie que vous ne pouvez pas les installer avant qu'un module ne soit chargé en mémoire. les installer avant qu'un module ne soit chargé en mémoire, et si le logiciel cible Si le logiciel cible écrase cette mémoire, ils deviendront invalides. En général, toute fonction de débogage qui doit être activée par le débogueur ne persiste pas après une réinitialisation, et peut être affectée après d'autres après d'autres transitions de mode architectural telles que l'entrée/sortie du SMM ou l'entrée/sortie de la VM. ou l'entrée/sortie de VM. Voici quelques exemples spécifiques :

La réinitialisation du CPU effacera toutes les fonctions 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 seront invalides jusqu'à ce que la cible s'arrête une fois après la réinitialisation. Notez que cet arrêt peut être être dû soit à un reset-break, soit à un arrêt initié par l'utilisateur. Dans Dans les deux cas, le débogueur restaurera les fonctions de débogage nécessaires. L'entrée/sortie SMM désactive/réactive les points d'arrêt, cela signifie que vous ne pouvez pas Cela signifie que vous ne pouvez pas spécifier un point d'arrêt en SMRAM lorsque vous êtes arrêté en dehors de la SMRAM. Si vous souhaitez faire une pause dans la SMRAM, vous devez d'abord vous arrêter à l'entrée et appliquer manuellement le point d'arrêt. Alternativement, vous pouvez alternativement, vous pouvez patcher le BIOS pour réactiver les points d'arrêt lors de l'entrée en SMM, mais ceci mais cela requiert la capacité de modifier le BIOS, ce qui ne peut pas être code de production.

Prograide.com

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.

Powered by:

X