KDB
Co to jest?
KDB (built-in Kernel DeBugger for linux) jest patch'em na jądro Linux'a, który umożliwia badanie zawarości pamięci, struktur danych, stanu procesu w trakcie działania systemu.
KDB wymaga JEDNEJ maszyny.
KDB Obsługuje systemy wieloprocesorowe.
NIE jest możliwe debugowanie z poziomu kodu - tylko instrukcje assemblera.
Instalacja
Instalacja w skrócie polega na dodaniu patch'y i rekompilacji jądra.
Należy wykonać następujące kroki:
-
Ściągnąc dwa patch'e dla odpowiedniej wersji jądra - Strona projektu KDB.
np:
kdb-v4.4-2.6.17-common-1.bz2
kdb-v4.4-2.6.17-i386-1.bz2
Dla KDB w wersji 4.4 na jądro 2.6.17 na archtekturę i386.
-
Skopiować ściągnięte patch'e do /usr/src/linux i rozpakować:
#bzip2 -d kdb-v4.4-2.6.17-common-1.bz2
#bzip2 -d kdb-v4.4-2.6.17-i386-1.bz2
-
Zastosować patch'e:
#patch -p1 <kdb-v4.4-2.6.17-common-1
#patch -p1 <kdb-v4.4-2.6.17-i386-1
-
Wybór opcji kompilacji jądra - sekcja "Kernel Hacking":
"Built-in Kernel Debugger support" - ustawia flagę CONFIG_KDB - wymagane
"Compile the kernel with frame pointers" - ustawia flagę CONFIG_FRAME_POINTER - opcjonalnie
(lepsze śledzenie stosu wywołań)
"KDB off by default" - ustawia flagę CONFIG_KDB_OFF - KDB wylączone domyślnie
-
Rekompiacja jądra - zalecane "make clean" przed kompilacją.
Praca z KDB
Gdy KDB jest aktywne i zostanie przywołane (szczegóły niżej) system zostaje zatrzymany. Użytkownik znajduje się wtedy w trybie pracy z KDB i może debuggować jądro systemu. Polecenie
"go" powoduje wznowienie wykonywania kodu jądra przez system.
Aktywowanie
KDB jest domyślnie aktywne od startu systemu. Sytuację tą zmienia wybranie flagi
CONFIG_KDB_OFF przed kompilacją jądra.
W takim wypadku KDB aktywujemy ustawiając flagę
"kdb=on" przed załadowaniem systemu.
Możemy to zrobić również po załadowaniu systemu:
#echo "1" >/proc/sys/kernel/kdb
Podobnie postępujemy, gdy KDB jest domyślnie aktywne i chcemy je deaktywować.
"kdb=off"
#echo "0" >/proc/sys/kernel/kdb
Przywoływanie
KDB zostaje przywołane w następujących przypadkach:
automatycznie - jeśli napotkamy na kernel panic,
automatycznie - jeśli napotka na wcześniej zdefiniowany breakpoint,
ręcznie - przez naciśnięcie PAUSE (Ctrl-Pause Break) przez użytkownika,
Ctrl-A - wywołuje KDB z serial console.
Możliwości
Śledzenie wykonania kodu jądra instrukcja po instrukcji (assembler).
Wyświetlanie zawartości pamięci i możliwość wprowadzania zmian.
Zatrzymanie wykonania w wyniku napotkania na określoną instrukcję.
Zatrzymanie wykonania w wyniku dostępu (modyfikacji) określonych miejsc w pamięci.
Zatrzymanie wykonania w wyniku dostępu (modyfikacji) rejestrów.
Oglądanie stosu wywołań dla określonego procesu (podając PID).
Deasemblacja instrukcji.
Komendy KDB
Do zbioru komend z poziomu KDB dostajemy się poleceniem
"help".
Są one na tyle dobrze opisane, że można się bez problemu zorientować, do czego służą.
Ponadto w internecie znajduje się wiele stron przedstawiających i opisujących komendy KDB wraz z przykładami zastosowania. Zamiast przepiywać ich zawartość podam odpowiednie linki: