2010-10-11 10 views
25

Je veux savoir comment fonctionne gdb en interne. par exemple. Je connais une brève idée qu'il utilise l'appel système ptrace() pour surveiller le programme tracé. Mais je veux savoir comment il gère les signaux, comment il insère du nouveau code, et d'autres choses fabuleuses.Comment fonctionne gdb?

+6

Cela couvre certains des aspects importants de GDB internes: www.gnuarm.com/pdf/gdbint.pdf – zengr

+3

@zengr: Pourquoi ne pas vous postez que comme une réponse? – DarkDust

Répondre

6

La seule façon que vous découvrirez est en étudiant la source.

Vous pouvez également le créer et le déboguer avec lui-même. Étape par le code, et vous saurez exactement comment il fait ce qu'il fait.

La lecture de la source GDB n'est pas pour les faibles de cœur - elle regorge de macros et utilise beaucoup libbfd, ce qui est difficile à comprendre. Il doit, car il est portable (et en particulier, construit et fonctionne sur des plates-formes qui n'ont pas du tout ptrace()).

+0

Je pense que vous voulez dire [pleine] (http://en.wiktionary.org/wiki/chock_full) – sje397

+0

http://www.cs.utah.edu/dept/old/texinfo/gdb/gdbint.html#SEC1 – zengr

16

Vérifiez la GDB Internals Manual, qui couvre certains des aspects importants. Il y a aussi un ancien PDF version de ce document.

A partir du manuel:

Ce document documente le fonctionnement interne du débogueur GNU, gdb. Il comprend une description des principaux algorithmes et opérations de gdb, ainsi que des mécanismes qui adaptent gdb à des hôtes et des cibles spécifiques.

+0

[Manuel interne de GDB] (https://sourceware.org/gdb/download/onlinedocs/gdbint/) non trouvé zengr .. – sree

+2

Merci Sree! Fixé. – zengr

3

Extrait du gdbint.pdf:

Il peut se faire soit en tant que points d'arrêt matériels ou logiciels points d'arrêt:

  • points d'arrêt matériels sont parfois disponibles comme fonctionnalités de débogage BUILTIN avec certains chips. Typiquement ceux-ci fonctionnent en ayant registre consacré dans lequel l'adresse de point d'arrêt peut être stockée. Si le PC (raccourci pour le compteur de programme) correspond toujours à une valeur dans un registre de point d'arrêt , la CPU soulève une exception et la signale à GDB.
  • Une autre possibilité est lorsqu'un émulateur est utilisé; De nombreux émulateurs incluent des circuits qui surveillent les lignes d'adresse provenant du processeur et l'obligent à s'arrêter si l'adresse correspond à l'adresse du point d'arrêt.
  • Une troisième possibilité est que la cible a déjà la capacité de faire des points de rupture en quelque sorte; par exemple, un moniteur ROM peut faire ses propres points d'arrêt logiciels . Donc, bien que ces points d'arrêt ne soient pas littéralement matériels, du point de vue de GDB, ils fonctionnent de la même manière;
  • Les points d'arrêt logiciels nécessitent que GDB effectue un peu plus de travail. La théorie de base est que GDB remplacera une instruction de programme avec un piège, fracture illégale ou d'une autre instruction qui provoquera une exception , puis quand il a rencontré, GDB prendra l'exception et arrêter 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.