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).


Osobiste