Na ovoj stranici

Otklanjanje poteškoća s otklanjivačem pogrešaka

Ovaj odjeljak navodi neke uobičajene probleme na koje možete naići tijekom otklanjanja pogrešaka i rješenja za njih.

Nemoguće je pokrenuti otklanjivač pogrešaka

Neke antivirusne aplikacije ne dopuštaju otklanjivačima grešaka da dohvate podatke. Na primjer, na sustavu Windows pokretanje otklanjivača grešaka može ne uspjeti s porukom: " Otklanjivani proces je zaustavljen jer je primio signal od operativnog sustava. Naziv signala: ? značenje signala: Nezidentificirani signal."Ne može se pokrenuti otklanjivač grešaka

Na nekim uređajima, kao što su Wacom tableti, pokrenuti procesi mogu spriječiti pokretanje otklanjivača pogrešaka. Zaustavite sve pokrenute procese i zatim ponovno pokrenite otklanjivač pogrešaka.

Debugger ne zaustavlja na prekidnim točkama

Možda ste stvorili release verziju koja nema informacije za otklanjanje pogrešaka. Debug verzija GNU Compiler Collectiona (GCC) ima opciju -g na naredbenom retku kompajlera. Provjerite je li ta opcija prisutna u izlazu kompajlera. Ako nije, prilagodite postavke izrade u načinu rada Projects.

Debugger ne radi

Ako otklanjivač grešaka ne radi ispravno, pokušajte sljedeće:

  1. Odaberite opciju gumb Pokreni (Run) kako biste provjerili je li selektor kompajlera i pokretača odabrao izvršnu metu i možete li pokrenuti aplikaciju.
  2. Provjerite je li otklanjivač pogrešaka ispravno postavljen.
  3. U načinu rada Debug, idite na View > Views > Debugger Log kako biste otvorili prikaz dnevnika otklanjanja pogrešaka. Pregledajte sadržaj panela na desnoj strani kako biste saznali što je pošlo po zlu. Uvijek priložite sadržaj panela uz pitanja vezana za otklanjanje pogrešaka na mailing listu Qt Creator (qt-creator@qt-project.org) ili ga zalijepite na servis za kopiranje koda prije postavljanja pitanja na IRC-u (na kanalu #qt-creator na Libera.Chatu).

    Napomena: Greška 135 obično znači da se ne može pronaći ovisna DLL datoteka.

Članovi varijable pokazivača ne prikazuju se izravno

Kada koristite prikaze Locals i Expressions za pregled varijable pokazivača i proširite stavku stabla varijable, prikazuje se još jedna razina stabla. Za izravno prikazivanje članova varijable pokazivača odaberite Dereference Pointers Automatically u kontekstnom izborniku u prikazima Locals i Expressions.

Ako uopće ne možete vidjeti varijable, provjerite jeste li odabrali konfiguraciju za otklanjanje pogrešaka.

Članovi strukture nisu sortirani prema rasporedu strukture

Po zadanom se članovi strukture prikazuju abecednim redom. Za pregled stvarnog rasporeda u memoriji, poništite Sort Members of Classes and Structs Alphabetically u kontekstnom izborniku u prikazima Locals i Expressions.

Ugrađeni otklanjivač pogrešaka je spor pri pokretanju i tijekom izvođenja

Sporoće povezane s učitavanjem informacija za otklanjanje pogrešaka teško je izbjeći. Sljedeći odjeljci opisuju neka moguća rješenja.

Kezanje indeksa simbola GDB-a

Kada koristite GDB kao pozadinski sustav, možete automatski spremiti kopiju njegovog indeksa simbola u predmemoriju na disku i dohvatiti je prilikom učitavanja iste binarne datoteke u budućnosti. Idite na Preferences > Debugger > GDB > Use automatic symbol cache.

GDB kartica u postavkama otklanjanja pogrešaka

Minimiziranje broja prekidnih točaka

Dio usporenja otklanjanja pogrešaka proizlazi iz održavanja prekidnih točaka unutar otklanjača pogrešaka (u nekim okolnostima sve prekidne točke moraju se ponovno umetnuti i ukloniti za svaki korak) i ocjenjivanja izraza nakon svakog koraka. Preporučujemo da minimizirate broj prekidnih točaka i promatranih izraza.

Čišćenje izgradnji

Ako zastarjele datoteke .pdb usporavaju otklanjanje pogrešaka, pokušajte s čistom izgradnjom.

Onemogućavanje inkrementalnog povezivanja

Inkrementalno povezivanje može utjecati na otklanjanje pogrešaka. Ako prikaz dnevnika otklanjanja pogrešaka (Debugger Log ) prikazuje poruku " Ne može se provjeriti kontrolna suma modula ", onemogućite inkrementalno povezivanje.

Kada koristite CMake kao sustav za izgradnju, dodajte sljedeći redak u CMakeLists.txt datoteku projekta:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO" )

Kada koristite qmake kao sustav za izgradnju, dodajte sljedeći redak u .pro datoteku projekta:

QMAKE_LFLAGS_DEBUG += /INCREMENTAL:NO

Debugger se ne može povezati s aktivnim procesom na Linuxu

GDB koristi ptrace za povezivanje na pokrenute procese. Neke Linux distribucije to ne dopuštaju, što sprječava sve pokušaje izravnog povezivanja na postojeći proces ili korištenja opcije Run in terminal u Qt Creator.

Razlozi za to opisani su u KernelHardeningu.

Međutim, korisnost ove sigurnosne mjere čini se upitnom jer se tu značajku može lako onemogućiti. S root dozvolama, značajku možete privremeno onemogućiti tako da u /proc/sys/kernel/yama/ptrace_scope upišete 0 ili trajno promjenom vrijednosti u /etc/sysctl.d/10-ptrace.conf. Čak i ako nemate povišene dozvole, značajku možete onemogućiti predmemoriranjem biblioteke koja poziva prctl(0x59616d61, getppid(), 0, 0, 0);. Qt Creator isporučuje takvu biblioteku: dodajte $QTCREATORDIR/lib/qtcreator/libptracepreload.so u varijablu okruženja LD_PRELOAD.

Vidi također Kako: Debugiranje, Debugiranje i otklanjanje pogrešaka.

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.