Development/FAQs/Debugging FAQ/pl
Ogólne
Jak mogę uniknąć Dr Konqi?
Należy ustawić zmienną środowiskową KDE_DEBUG (na 1 lub jakąkolwiek inną wartość)
Aby uzyskać Dr Konqi ponownie, usuń (komendą unset) zmienną środowiskową KDE_DEBUG.
Przykład:
- Aby uniknąć Dr Konqi:
export KDE_DEBUG=1
- Aby zobaczyć Dr Konqi:
unset KDE_DEBUG
Jak mogę przełączyć Dr Konqi do trybu programisty?
W pliku $KDEHOME/share/config/drkonqirc dodaj:
[drkonqi]
ConfigName=developer
Co to jest plik core? Skąd wziąć plik core?
Plik core to obraz pamięci w momencie zawieszenia aplikacji. Korzystając z pliku core, możesz poznać wartości zmiennych w momencie zawieszenia.
Niektóre dystrybucje wyłączają generowanie plików core. Aby włączyć ponownie, użyj ulimit -c unlimited
.
Jeśli już masz plik core, możesz przebadać go przy użyciu gdb. Najbardziej przydatną komendą gdb jest bt
, generująca zrzut, ślad po zawieszeniu aplikacji.
Więcej informacji o gdb znajdziesz na tej stronie.
Jakich narzędzi można użyć do debuggowania mojej aplikacji?
- kDebug() (kdDebug() w KDE3) zapewnia prosty, ale efektywny sposób debugowania aplikacji.
- gdb, the GNU debugger, jest najszybszym sposobem śledzenia aplikacji krok po kroku i badania zmiennych (zalecana wersja gdb 6.x lub wyższa)
- Valgrind
- kdbg jest graficznym interfejsem do gdb (z KDE GUI). Wspiera wiele typów Qt (łącznie z QString).
- Monitor wycieków pamięci : See kdesdk/kmtrace. Plik README dostarczy informacji i wszystko wyjaśni.
- qdbus i dbusviewer z pakietu Qt pozwala przeglądać interfejsy DBus i w łatwy sposób tworzy odwołania DBus.
Sprawdź tę stronę i kdesdk, gdzie znajdziesz masę przydatnych skryptów.
Jak mogę wyświetlić QString w gdb?
Pobierz kdesdk i w pliku ~/.gdbinit dodaj linię:
source /path/to/kde/sources/kdesdk/scripts/kde-devel-gdb
W gdb możesz wtedy użyć printqstring myqstring
, aby zobaczyć jego zawartość.
Na przykład QString myqstring = QString::fromLatin1("contents");
może zostać prześledzony używając
(gdb) printqstring myqstring $1 = "content"
Zobacz plik kde-devel-gdb z innymi makrami.
Nie mam symbolu debugując aplikację, która używa kpart. Co powinienem zrobić?
Musisz zatrzymać się zaraz po załadowaniu symboli z biblioteki. Potem możesz normalnie debugować. Możesz utworzyć makro gdb, aby zatrzymać się zaraz po załadowanej części. W przypadku kword, na przykład, używam:
define startkword break main run break 'KoDocument::KoDocument(int, QWidget *, char const *, QObject *, char const *, bool)' cont
Jak debuggować ioslave?
Zobacz debuggowanie ioslaves
Dlaczego mój sygnał i połączenie gniazda nie działa?
Oto kilka kroków, które można wykorzystać do rozwiązania problemu, dlaczego sygnał/gniazdo nie działa (gniazdo nie odpowiada z jakiejś przyczyny).
1. Upewnij się, że connect() nie wyświetla ostrzeżenia w konsoli podczas działania.
Jeśli tak, sprawdź Q_OBJECT, czy nazwy parametru nie ma w połączeniu, czy typy parametru są odpowiednie i czy gniazdo jest zdefiniowane oraz czy moc został skompilowany.
1b. Lub możesz sprawdzić, co zwraca connect() mimo, że nie daje żadnego komunikatu o błędzie 2. Upewnij się, że sygnał rzeczywiście jest emitowany 3. Upewnij się, że odbiorca nie jest już skasowany w tym momencie 4. Upewnij się, że emitter->signalsBlocked() zwraca false
Czy istnieje preferowana metoda wyświetlania danych z debuggu w stderr?
Yes; see this tutorial.