web-dev-qa-db-fra.com

Comment fonctionne un point d'arrêt dans le débogueur?

Les points d'arrêt sont l'une des fonctionnalités les plus intéressantes prises en charge par les débogueurs les plus populaires tels que GDB. Mais comment fonctionne un point d'arrêt? Quelles modifications de code le compilateur fait-il pour atteindre le point d'arrêt? Existe-t-il des fonctionnalités matérielles spéciales utilisées pour prendre en charge les points d'arrêt?

34
Shan

Le compilateur n'a pas besoin de "modifier" le binaire de quelque manière que ce soit pour prendre en charge les points d'arrêt. Cependant, il est important que:

  • Le compilateur inclut suffisamment d'informations dans l'exécutable (qui ne sont pas dans le code lui-même mais dans des sections spéciales du même fichier), afin que le débogueur puisse relier la source que l'utilisateur souhaite déboguer avec le code machine. Une chose typique que le débogueur doit savoir pour être capable de définir des points d'arrêt (à moins que vous ne spécifiiez des adresses directement), est où (à quelle adresse) les fonctions du programme et les lignes de code source commencent (dans le code machine).
  • Le code n'est en aucun cas optimisé par le compilateur, ce qui rend impossible la relation entre le code source et le code machine. En règle générale, vous souhaiterez un code de débogage qui n'a pas été optimisé ou un code dans lequel seules des optimisations soigneusement sélectionnées ont été effectuées.

Le reste du travail est ensuite effectué par le débogueur lui-même.

  1. Les points d'arrêt logiciels n'ont pas nécessairement besoin de fonctionnalités matérielles spéciales. Le débogueur ici repose sur la modification du binaire d'origine (c'est la copie qui est chargée en mémoire). Lorsque vous définissez un point d'arrêt, le débogueur place une instruction spéciale à l'emplacement du point d'arrêt. Cette instruction spéciale doit en quelque sorte laisser le débogueur détecter quand elle (cette instruction spéciale) est en cours d'exécution. Cela peut être une instruction qui provoque une sorte d'interruption/exception, que le débogueur peut accrocher, ou une instruction qui gère le contrôle pour déboguer l'unité. Si cela fonctionne sous un système d'exploitation, ce système d'exploitation doit prendre en charge la modification du programme en cours d'exécution (avec quelque chose comme ptrace poke/peek). L'inconvénient des points d'arrêt SW est que le débogueur doit pouvoir modifier le programme en cours d'exécution, ce qui n'est pas possible si le programme s'exécute à partir d'une sorte de mémoire en lecture seule (assez courante dans le monde embarqué).
  2. Les points d'arrêt matériels (qui doivent être pris en charge par le CPU) implémentent un comportement similaire sans modifier le programme binaire. Ceci est spécifique au processeur, mais cela vous permet généralement de définir au moins une adresse de programme à laquelle l'exécution doit atteindre un point d'arrêt. La CPU compare en permanence le PC actuel avec ces adresses de point d'arrêt et une fois que la condition est remplie, elle interrompt l'exécution. Le nombre de ces points d'arrêt est toujours limité.
24
dbrank0

Pour mettre un point d'arrêt en premier, nous devons ajouter des informations spéciales dans le binaire. Nous utilisons l'indicateur -g lors de la compilation des fichiers source c pour inclure cette information. Le débogueur de logiciel utilise en fait cette information pour mettre des points d'arrêt. pour le support du point de rupture matériel est dans VxWorks comme je l'ai expérimenté. Fondamentalement, au point de rupture, le processeur s'arrête.Ainsi, en interne, toute étape qui donnera une exception au processeur peut être utilisée pour mettre un point de rupture logiciel.Tandis qu'un point de rupture matériel fonctionne en faisant correspondre l'adresse stockée dans les registres matériels pour provoquer une exception. Le point de rupture matériel est très puissant mais il dépend fortement de l'architecture.

Une très bonne explication est ici Quelle est la différence entre les points d'arrêt matériels et logiciels? Une bonne introduction avec des informations relatives au processeur est donnée ici http://processors.wiki.ti.com/index .php/How_Do_Breakpoints_Work

1
achoora