2017-08-12 2 views
1

Je suis en train de déboguer le noyau Linux sur Mac (VMWare Fusion), en utilisant deux machines virtuelles Linux.Comment éviter les "optimisations" lors du débogage du noyau Linux

J'ai installé kernel-debuginfo-3.10.0-327.36.3.el7.x86_64 et le debugStub fonctionne.

enter image description here

Puis j'ai ajouté un point d'arrêt sur fchown syscall, il se casse,

Breakpoint 10, SYSC_fchown (group=0, user=0, fd=<optimized out>) at fs/open.c:650 

Mais je ne peux pas lire fd.file, la valeur est optimisée sur,

enter image description here

Des idées?

+0

Vous devez construire avec des optimisations plus faibles et '-g3'. Pour les optimisations, utilisez '-O1' ou' -O0'. Utilisez '-g3' car il fournit un maximum d'informations de débogage, y compris les constantes symboliques et les définitions. – jww

Répondre

0

Mais je ne peux pas lire fd.file, la valeur est optimisée sur

Cela se produit assez souvent lors du débogage du code optimisé.

Votre meilleur pari est probablement à disassemble la routine. Pour une petite routine comme celle-ci, il n'est généralement pas difficile de dire dans quel registre se trouve la valeur, et vous pouvez alors lancer le bon type. Par exemple. si la valeur est en $r9:

(gdb) p *(struct file *)$r9