52 votes

Le noyau Linux live de débogage, comment c'est fait et quels sont les outils utilisés?

Quelles sont les plus courantes et pourquoi pas rare que les méthodes et les outils utilisés pour faire vivre le débogage sur le noyau Linux? Je sais que Linus pour eg. est contre ce genre de débogage du Noyau Linux ou moins et donc rien n'a vraiment été fait dans ce sens dans ces années-là, mais honnêtement, beaucoup de temps a passé depuis 2000 et je suis intéressé de savoir si le fait que la mentalité a changé en ce qui concerne le projet Linux et quelles méthodes sont utilisées pour faire vivre le débogage sur le noyau Linux pour le moment(local ou distant)?

Les références à des procédures pas à pas et tutoriels sur les techniques et les outils sont les bienvenus.

29voto

Kevin Points 2082

Une autre option est d'utiliser de la GLACE/JTAG controler, et GDB. Ce "matériel" solution est surtout utilisée avec les systèmes embarqués,

mais par exemple Qemu offre des fonctionnalités similaires à:

  • départ qemu avec un gdb 'à distance' stub qui est à l'écoute sur localhost:1234' : qemu -s ...,

  • ensuite, à l'aide de GDB vous ouvrez le fichier kernel vmlinux compilé avec les informations de débogage (vous pouvez prendre un coup d'oeil a cette liste de diffusion thread où ils discutent de la unoptimization du noyau).

  • connectez GDB et Qemu: target remote localhost:1234

  • voir que vous êtes en direct du noyau:

(gdb) où

#0  cpu_v7_do_idle () at arch/arm/mm/proc-v7.S:77
#1  0xc0029728 in arch_idle () atarm/mach-realview/include/mach/system.h:36
#2  default_idle () at arm/kernel/process.c:166
#3  0xc00298a8 in cpu_idle () at arch/arm/kernel/process.c:199
#4  0xc00089c0 in start_kernel () at init/main.c:713

malheureusement, l'utilisateur de l'espace de débogage n'est pas possible à ce jour avec GDB (pas de liste des tâches d'information, pas de MMU reprogrammation pour voir les différents contextes de processus, ...), mais si vous restez dans le noyau de l'espace, c'est tout à fait conveniant.

  • info threads va vous donner la liste et les états des différents Processeurs

EDIT:

Vous pouvez obtenir plus de détails sur la procédure dans ce PDF:

Débogage de systèmes Linux à l'aide de GDB et QEMU.

20voto

Ninefingers Points 18767

Selon le wiki, kgdb a été fusionné dans le noyau en 2.6.26 ce qui est dans les dernières années. kgdb est un débogueur à distance, de sorte que vous l'activer dans le noyau puis vous attacher gdb pour elle en quelque sorte. Je dis en quelque sorte, comme il semble y avoir beaucoup d'options - voir la connexion de gdb. Étant donné qu' kgdb est maintenant dans l'arborescence source, je dirais d'aller de l'avant c'est ce que vous voulez utiliser.

Donc, il semble que Linus a cédé. Cependant, je tiens à souligner son argument - vous devez savoir ce que vous êtes en train de faire et de connaître le système. C'est le noyau de la terre. Si quelque chose va mal, vous n'obtenez pas l' segfault, vous obtenez quelque chose d'obscur problème plus tard à l'ensemble du système vers le bas. Ici des dragons. Procéder avec soin, vous avez été averti.

14voto

Brad Points 6004

Un autre bon outil pour "vivre" le débogage est kprobes / dynamique des sondes.

Cela vous permet de créer dynamiquement des tout petits modules qui fonctionnent lorsque certaines adresses sont exécutés comme une sorte de point d'arrêt.

Le gros avantage d'entre eux sont:

  1. Ils ne pas d'impact sur le système, c'est à dire lorsqu'un emplacement est frappé - il juste excecutes le code - il n'a pas arrêter tout le noyau.
  2. Vous n'avez pas besoin de deux différents systèmes interconnectés (cible et de débogage) comme avec kgdb

Il est préférable de faire les choses comme le fait de frapper un point d'arrêt, et de voir ce que les valeurs de données, ou de vérifier si les choses ont été modifiés ou remplacés, etc. Si vous voulez "code pas à pas" - il ne pas le faire.

4voto

mpe Points 1597

En fait la blague, c'est que Linux est un débogueur de noyau depuis 2.2.12, xmon, mais seulement pour l' powerpc architecture (en fait, il a été ppc puis).

Ce n'est pas un débogueur, et il est presque entièrement sans-papiers, mais tout de même.

http://lxr.linux.no/linux-old+v2.2.12/arch/ppc/xmon/xmon.c#L119

3voto

mpe Points 1597

Comme quelqu'un qui a écrit le code du noyau beaucoup je dois dire que je n'ai jamais utilisé kgdb, et seulement rarement utiliser kprobes etc.

Il est encore souvent la meilleure approche pour jeter un peu de l'stratégiques printks. En plus les noyaux récents trace_printk est une bonne façon de le faire sans spammer la commande dmesg.

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