11
votes

Pourquoi n'y a-t-il pas de symboles de débogage dans mon Vmlinux lors de l'utilisation de GDB avec / proc / kcore?

J'ai configurer tous les config_debug _ code> options associées à y code>, mais quand j'essaie de déboguer le noyau, il n'est pas indiqué aucun symbole de débogage trouvé:

gdb /usr/src/linux-2.6.32.9/vmlinux /proc/kcore

Reading symbols from /usr/src/linux-2.6.32.9/vmlinux...(no debugging symbols found)...done.


12 commentaires

Pourriez-vous vérifier que votre fichier .config contient la ligne config_debug_info = y ?


Oui, j'ai vérifié que plusieurs fois.


Compilez-vous votre propre noyau, déboguer une distribution?


Oui, je compile mon propre noyau, mais pas de symboles de débogage jusqu'à présent ...


Supprimer des fichiers .O dans votre arborescence de construction, puis tapez faire v = 1 pour obtenir la sortie verbeuse. L'appel à GCC comprend-il en fait le drapeau "-g"?


@ Karmastan, j'ai vérifié avec faire v = 1 , et oui il y a le drapeau -g


Dans gdb, quelle est la sortie de (gdb) b fs / open.c: 10 ?


C'est Point d'arrêt 1 à 0xFFFFFFF810D2814: Fichier FS / Open.c, Line 10.


Ensuite, on dirait que vous avez un support de débogage en fonctionnement!


Mais quand j'essaie de voir comment pTrace est implémenté ( l pTrace ), il n'y a pas de telles info fonction "ptrace" non définie ...


Cela pourrait être parce qu'il n'y a pas de fonction appelée pTrace () dans le noyau. Si vous recherchez le gestionnaire d'appel de système PTRACE, il s'appelle sys_ptrace et est défini dans noyau / pTrace.c . Le macro syscall_define4 (ptrace, ...) définit réellement la fonction sys_ptrace () après que le préprocesseur soit effectué avec celui-ci.


@Compiler: J'aimerais vous rappeler que vous avez une prime ouverte sur cette question. Même si vous n'atteignez pas la prime, vous allez toujours perdre la réputation.


5 Réponses :


0
votes

Je me tromperai peut-être, mais je pensais que vous devriez installer le paquet debuginfo pour votre noyau pour obtenir des symboles


1 commentaires

Non, je pense avoir déjà installé ce paquet: config_debug_info = y



4
votes

Voici ma meilleure hypothèse jusqu'à présent: je ne sais pas, et ça n'a pas d'importance.

Je ne sais pas pourquoi gdb imprime le message "(aucun symbole de débogage trouvé)". J'ai effectivement vu cela lors de la construction de mes propres noyaux. Je configure un noyau pour utiliser les symboles de débogage, mais GDB imprime toujours ce message lorsqu'il regarde l'image du noyau. Je n'ai jamais pris la peine de m'en regarder, car mon image peut toujours être débogé. Malgré le message, GDB peut toujours désassembler des fonctions, ajouter des points d'arrêt, rechercher des symboles et des fonctions à sens unique. Je n'ai jamais remarqué un manque de fonctionnalité de débogage. Je suppose que la même chose vous arrive.

edit: basé sur vos commentaires à la question, il semble que vous recherchiez le mauvais symbole avec votre débogueur. Les gestionnaires d'appel système commencent par un préfixe de SYS _ , mais vous ne pouvez pas dire à regarder le code. Le macro syscall_define4 (ptrace, ...) vient de finir par déclarer la fonction comme asmlinkage long long sys_ptrace (...) , bien qu'il fait d'autres trucs fous si vous avez Ftrace activé.


0 commentaires

4
votes

Make Menuconfig-> piratage du noyau -> [] Débogage du noyau -> [] Compilez le noyau avec des informations de débogage (config_debug_info)


1 commentaires

L'OP n'a-t-il pas dit qu'il l'a fait déjà? "J'ai configurer toutes les options associées config_debug_ à Y"



1
votes

Ajouter -g à la variable CFLAGS dans le noyau Makefile


0 commentaires

3
votes

Il est également possible lorsque vous emballez votre image Vmlinuz, les symboles de débogage ont été supprimés (lors de l'utilisation de make-kpkg pour créer un package Deb pour le noyau Linux). Vous devez donc utiliser le fichier Vmlinux construit sous votre arborescence source Linux pour que ces symboles de débogage.


0 commentaires