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í:
    1. Počet aktuálně otevřených instancí (globalní count, v →open count++, v →release count--)
    2. Binární data THIS_MODULE→module_core o délce THIS_MODULE→core_text_size (THIS_MODULE je definované v jádře v linux/module.h)
      • Lze použít simple_read_from_buffer, jinak si lze aktuální pozici pamatovat v posledním parametru read (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 v module_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
    • 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 odpovídat objdump -d jmeno_vaseho_modulu.ko