Debugowanie Kadu
Kadu
Jeżeli chcemy ułatwić innym wyszukiwanie błędów w Kadu należy stosować funkcję kdebugm - poza pierwszym argumentem, składnia jest taka jak funkcji printf. Pierwszy argument jest maską bitową oznaczającą rodzaj informacji oraz czy ewentualny błąd jest poważny. Zdefiniowane są następujące stałe:
KDEBUG_FUNCTION_START /* start funkcji (256)*/ KDEBUG_FUNCTION_END /* koniec funkcji (512)*/ KDEBUG_INFO /* zwykłe informacje (1024)*/ KDEBUG_WARNING /* niegroźne ostrzeżenie (2048)*/ KDEBUG_ERROR /* poważny błąd, ale sytuacja jest do obejścia (4096)*/ KDEBUG_PANIC /* błąd fatalny, możliwe że program się niedługo po tym wywróci (8192)*/
KDEBUG_DUMP /* dużo danych do wypisania (16384)*/ KDEBUG_NETWORK /* informacja dotycząca obsługi sieci (32768)*/
KDEBUG_ALL /* wszystkie komunikaty (-1)*/
Na przykład jeżeli chcemy wypisać komunikat o tym, że dostaliśmy z sieci podejrzane dane, piszemy tak: kdebugm(KDEBUG_WARNING | KDEBUG_NETWORK, "Suspicious data on socket %d\n", address); wcześniej włączając nagłówek "debug.h".
Zdefinowane są 2 dodatkowe bezparametrowe funkcje: kdebugf() i kdebugf2() kdebugf() używa stałej KDEBUG_FUNCTION_START oraz __LINE__ i __FILE__ do wypisania komunikatu o rozpoczęciu funkcji kdebugf2() analogicznie wypisuje komunikat o zakończeniu funkcji
Wypisywanymi komunikatami steruje się ustawiając przed rozpoczęciem działania Kadu zmienną środowiskową DEBUG_MASK, np:
DEBUG_MASK=0 kadu
lub
export DEBUG_MASK=0; kadu
żadne komunikaty nie zostaną wypisane
DEBUG_MASK=-1 kadu
wszystkie komunikaty zostaną wypisane
DEBUG_MASK=40960 kadu
tylko informacje gdzie pierwszy argument funkcji kdebugm był ustawiony na KDEBUG_PANIC (2^13=8192) lub KDEBUG_NETWORK (2^15=32768) (lub oba) zostaną wypisane (8192+32768=40960)
Pierwsze 8 bitów maski zarezerwowane jest dla libgadu, więc:
DEBUG_MASK=255 kadu
wypisze tylko informacje pochodzące od biblioteki libgadu
Wartości stałych opisane są w pliku debug.h Standardowo DEBUG_MASK jest ustawione na KDEBUG_ALL & ~KDEBUG_FUNCTION_END W katalogu varia/scripts w źródłach Kadu znajduje się skrypt kadu_debug_set, ułatwiający obliczanie wartości tej zmiennej (opis użycia wewnątrz pliku).

