Interaktivní osnova
Tématické skupiny v rámci předmětu PB173 Tematicky zaměřený vývoj aplikací v jazyce C/C++
Téma 3: Ladění chyb (debugging)
Teoretická část
-
Jak ladit jádro
-
Ladicí výpisy a úrovně výpisů
-
Ratelimiting
-
debugfs
-
strace
Praktický úkol pro cvičení
-
netconsole
– poslání logu z virtuálního stroje na hosta -
Výpis trace procesů (
sysrq
) -
Vytvoření adresáře a souboru pod
debugfs
Domácí úkol
-
Příklad od minule rozšiřte tak, aby měl ve vašem debugfs adresáři 2 soubory vracející:
-
Počet aktuálně otevřených instancí (globalní count, v →
open count++
, v →release count--
) -
Binární data
THIS_MODULE→module_core
o délceTHIS_MODULE→core_text_size
(THIS_MODULE
je definované v jádře vlinux/module.h
)-
Lze použít
simple_read_from_buffer
, jinak si lze aktuální pozici pamatovat v posledním parametruread
(před return patří*loff += count
a na začátek funkce test*loff >= velikost
dat, které má uživatel dostat, v true větvi se pak vrátí 0, tj. EOF)
-
-
-
module_core
vypište také v textové podobě do logu vmodule_init
funkci-
print_hex_dump_bytes
(parametry popsány u její definice ⇒ LXR)
-
-
Kontrolu správnosti můžete provést přes
objdump -j .text -s jmeno_vaseho_modulu.ko
-
Tj. module_core odpovídá obsahu modulu, počínaje kódem
-
Ale při nahrání modulu se kód mírně změní. Např. prvních 5 bytů
module_core
se nebude shodovat s výstupemobjdump
při zapnutém FTRACE
-
-
Mimo jiné by mělo fungovat
-
cat /sys/kernel/debug/soubor2 >/tmp/x.o
-
objdump -b binary -m i386:x86-64 -D /tmp/x.o
(anebo-m i386
pro 32-bit) -
A obsah by měl (téměř) odpovídat
objdump -d jmeno_vaseho_modulu.ko
-
S odlišnostmi viz výše
-
-
-