Gdb Gyors útmutató
A hibakereső olyan programok, amelyek más programokat indítanak el, amelyek lehetővé teszik a felhasználó számára, hogy szabályozza ezeket a programokat, valamint megvizsgálja a változókat, amikor problémák lépnek fel.
A GNU Debugger, más néven GDB, a legnépszerűbb hibakereső a UNIX rendszerek számára a C ++ hibakereséshez.
A GNU Debugger segít a következő információk megszerzésében:
Ha a dump magja előfordult, az a kifejezés vagy a program összeomlik?
Ha egy függvény végrehajtása során hiba történik, melyik sor tartalmazza a hívást erre a funkcióra, és milyen paramétereket?
Melyek a programváltozók értékei egy adott ponton a programfuttatás során?
Mi a konkrét kifejezés eredménye a programban?
Hogyan működik a GDB hibakeresése?
A GDB lehetővé teszi, hogy futtassa a programot egy bizonyos pontra, majd állítsa le és nyomtassa ki egyes változók értékeit abban a pontban, vagy lépjen át egy sor egy programjával, majd minden sor után minden egyes változó értékét kinyomtassa.
A GDB egy egyszerű parancssori felületet használ.
Pontjegyek
Bár a GDB segíthet a csatlakoztatott memória-szivárgási hibák észlelésében, de ez nem eszköz a memóriaszivárgások kimutatására.
A GDB nem használható olyan programokhoz, amelyek hibával vannak felépítve, és ez nem segít a hibák kijavításában.
Mielőtt folytatná a telepítést, ellenőrizze, hogy a GDB telepítve van-e a Unix rendszeren a következő parancs futtatásával:
Ha a GDB telepítve van, megjeleníti az összes elérhető opciót a GDB-ben. Ha a GDB nincs telepítve, folytassa az új telepítést.
A GDB telepítését a rendszerre az alábbiakban ismertetett egyszerű lépések követésével telepítheti.
1. lépés: Győződjön meg róla. hogy rendelkezik a szükséges feltételekkel a GDB telepítéséhez:
ANSI-kompatibilis C-fordító (ajánlott az GCC - vegye figyelembe, hogy a GDB képes más hibakereső kódok hibakeresésére)
115 MB szabad lemezterület a partíción, amelyen a GDB-t építenénk.
20 MB szabad lemezterület partíciónként, amelyen a GDB telepítését tervezi.
Dekompressziós projektprogram GNU, GZIP
A segédprogram - a GNU verzió ismert, problémamentesen működik, mások. Valószínűleg. nem rosszabb.
2. lépés: Töltse le a Gdb forráselosztást a ftp.gnu.org/gnu/gdb-ból
pobj (Ezeket az utasításokat a Gdb-6.6.tar.gz verzióban használtuk.) Helyezzük el az elosztási fájlokat a rendezési könyvtárba.
3. lépés: Az összeszerelés könyvtárában vegye ki a Gdb-6.6.tar.gz csomagot, és vegye ki a forrásfájlokat az archívumból. Miután a fájlok elkészültek, vegye át a munkakönyvtárat egy Gdb-6.6 könyvtárba, amelyet automatikusan létrehozott a gyülekezési mappában.
4. lépés: Futtassa a konfigurációs szkriptet. Testreszabhatja a platform forrásfáját.
5. lépés: GDB létrehozása a Make segédprogram segítségével.
6. lépés: Jelentkezzen be root felhasználóként és telepítse a GDB parancsot a következő paranccsal.
7. lépés: Szükség esetén a lemezterület visszanyerhető a Gdb assembly könyvtár és az archív fájl eltávolításával a telepítés befejezése után.
Most a GDB telepítve van a rendszereden, és készen áll a használatra.
Hibakeresés A szimbólumtáblázat a forráskódban található változók, függvények vagy karakterláncok lefordított bináris programjainak utasításait tartalmazza. Ez a leképezés lehet valami:
Oktatóprogram ⇒ Meghatározott elemnév, elemtípus, forrásfájl, sorszám.
A szimbólum táblák beépíthetők a programba, vagy külön fájlként tárolhatók. Tehát ha egy programot hibakeresésre tervezel, létre kell hoznia egy szimbólumtáblát, amely rendelkezik a program hibakereséséhez szükséges információkkal.
Megállapíthatjuk, hogy a szimbólum táblázatok következő tényei:
A szimbólum táblázat működik egy adott program verziójához - ha a programot megváltoztatják, új táblát kell létrehozni.
A hibakeresés gyakran és lassabban épül fel, mint a kiskereskedelmi (nem hibakeresési) készletek; A hibakeresés tartalmaz egy szimbólum táblázatot és egyéb segédadatokat.
Annak érdekében, hogy a GDB képes legyen elolvasni ezt az információt, a szimbólum táblázatból soronként, kicsit másképp kell fordítanunk. Általában olyan programokat készítünk, mint például:
Ahelyett, hogy ezt elvégeznénk, össze kell állítanunk a -g flag-ot, az alábbiak szerint:
A GDB számos parancsot kínál, de a leggyakrabban használt parancsok a következők:
b main - Megadja a töréspontot a program elején
b - A töréspontot az aktuális sorba helyezi
b N - A töréspontot az N sorban helyezi el
b + N - A töréspont N vonalat az aktuális vonalra helyezi
b n - A töréspontot az "Fn"
d N - Törli a töréspontokat az N számmal
Információ törés - töréspontok listája
r - a programot a töréspontra vagy hibára futtatja
c - Folytatja a program végrehajtását a következő töréspontra vagy hibára
e - Works. amíg az aktuális funkció befejeződik
s - Elindítja a program következő sorát
s N - futtassa a program következő N sorát
n - Ahogyan, de ez nem lépés a függvényben
U N - Művek. Amíg nem kapsz N vonalat az aktuális sor előtt
p var - Megjeleníti a "változó" változó aktuális értékét
BT - Stack nyomkövetés
és - a stack szintje emelkedik
d - A köteg szintje csökken
d - befejezi a GDB munkáját
Első lépések: Indítás és leállítás
GCC -g myprogram.c
A myprogram.c programot a hibakeresési opcióval (-g) állítja össze. Még mindig kap egy a.out-ot, de hibakeresési információt tartalmaz, amely lehetővé teszi a változók és a funkciónevek használatát a GDB-en belül, nem pedig a nyers memóriacellák (nem érdekes).
A GDB megnyitja az a.out fájlt, de nem futtatja a programot. Látni fog egy tippet (GDB) - az összes példát ebből a sorból.
Az a.out elindításának három módja korábban töltődik be. Futtathatja közvetlenül (d), az argumentumokat (r arg1 arg2), vagy a fájlban lévő feedet. Normális esetben a megszakítás előtt meg kell határozni a töréspontokat.
h bontási pontokat
Segítségfüzetek listája (súgó) vagy segítségkérés egy adott témában (h) töréspont. A GDB jól dokumentált.
e - Kilépés a GDB-ből
Lépésenkénti kód
A léptetés lehetővé teszi, hogy nyomon kövesse a program elérési útját, és a beolvasott kódot beolvassa a kódot, amely törli vagy visszaadja az érvénytelen bevitelt.
Az aktuális vonal (L) 10 sorát, egy adott sort (50 liter) vagy a funkciót (l MyFunction) listázza.
A programot a következő sorra futtatja, majd megáll. Ha az aktuális sor egy függvény, elvégzi az összes funkciót, majd szünetel, a következő pedig jó a gyors kódoláshoz.
A következő parancsot hajtja végre, nem sorokat. Ha az aktuális parancs egy változót állít be, ugyanaz. mint a következő. Ha ez egy függvény, akkor ugrik be a függvénybe, végrehajtja az első utasítást, majd szünetelteti a lépést.
Végezze el az aktuális funkció végrehajtását, majd szüneteltesse (más néven lépésről lépésre). Hasznos ha véletlenül lépett be egy funkcióba.
Szakaszpontok vagy megfigyelések
A töréspontok fontos szerepet játszanak a hibakeresésben. Szüneteltetik a programot, amikor elér egy bizonyos pontot. Megtekintheti és módosíthatja a változókat, és folytathatja a végrehajtást. Ez akkor hasznos, ha bármilyen hiba bemenet vagy bemenet van ellenőrizni.
- A töréspontot a 45-ös sorban, vagy a MyFunction-ban állítja be. A program szünetel, amikor eléri a töréspontot.
Beállítja a megfigyelési pontot, hogy a program megszakad, amikor a változás feltétele (x == 3 változás esetén). A vezérlőpontok bizonyos bemenetekre (myPtr! = NULL) nagyok, ha megszakítás nélkül hívják a funkciót.
Folytatja a végrehajtást egy szünet után, törésponttal / nézőponttal. A program addig folytatódik, amíg el nem éri a következő töréspontot / megfigyelési pontot.
- Az N töréspont eltávolítása (az ellenőrzőpontok a létrehozáskor számozottak).
Változók beállítása
Megjeleníti az x aktuális értékét. Az eredeti változó nevek használatához szükséges a zászló (-g); A programokat rendszeresen összeállítják ezen információk eltávolítására.
állítsa be x = 3
- Az x értéket egy adott értékhez (3) vagy más változóhoz (y)
hívja a myfunctionfunction (x)
hívja a STRLEN-t (MyString)
Felhívja a felhasználó által definiált vagy rendszerfunkciókat. Ez nagyon hasznos, de vigyázz a buggy függvények hívására.
Folyamatosan megjeleníti az x változó értékét, amely minden lépés után vagy szünet után megjelenik. Hasznos, ha folyamatosan ellenőriz egy bizonyos értéket.
- Eltávolítja a megjelenítési parancs által megjelenített változó állandó megjelenítését.
Visszaváltási és keretes változás
A verem az aktuális funkcióhívások listája - ez megmutatja, hogy hol tartózkodik a programban. A keret tárolja az egy függvény, például az argumentumok hívásának részleteit.
A hívást a verem aktuális funkciójára nyomtatja. megmutatni. ahol az aktuális programban tartózkodik. Ha az a () függvényhez tartozó alap hívások B () -t hívnak, amely a () gombbal hívja, akkor ez a nyom
Menjen a következő keretbe felfelé vagy lefelé a függvénykészletben. Ha C-ben vagy, akkor b-re ugorhat, vagy helyi változókat tárhat fel.
Jelfeldolgozás
A jelek bizonyos események, például időzítő vagy hibák után dobtak. A GDB szünetelhet, ha jelet érzékel; akkor helyettük figyelmen kívül hagyhatja őket.
fogantyú [jelzés] [cselekvés]
SIGUSR1 fogantyú
fogantyú SIGUSR1 NOPRINT
folyamat figyelmen kívül hagyja a SIGUSR1-et
Azt mondja a GDB figyelmen kívül hagy egy bizonyos jelet (SIGUSR1), amikor ez bekövetkezik. Különböző szinteket figyelmen kívül hagynak.
A következő példákon keresztül megismerkedhet a program hibakeresési eljárásával és a rendszermag leesésével.
Ez a példa azt mutatja be, hogy hogyan oldja meg a nullára osztott kivétel miatt bekövetkezett hibát.
Ez a példa olyan programot mutat be, amely visszaállíthatja a kernelt a nem inicializált memória miatt.
Mindkét program C + + -on van írva, és különböző okokból létrehoz egy core dumpot. Ezt a két példát követve képesnek kell lennie a C vagy C ++ core dump generációs programok hibakeresésére.
Miután befejezte ezt a leckét, alaposan meg kell értenie egy C vagy C ++ program hibakeresését a GNU Debugger használatával. Most nagyon könnyű lesz megismerni más hibakeresők működését, mert nagyon hasonlítanak a GDB-hez. Nagyon ajánlott más hibakeresőkön keresztül megismerkedni, és megismerkedniük saját funkcióikkal.
Rengeteg jó hibakereső van a piacon:
DBX Debugger - Ez a hibakereső a Sun Solaris programmal érkezik. és teljes információt kaphat a hibakeresőről. a DBX man oldal használatával, azaz a DBX emberrel.
DDD Debugger - Ez a DBX grafikus változata és szabadon elérhető Linux alatt. A teljes részletesség érdekében használja a DDD-súgó oldalt, vagyis a DDD-t.
A GNU Debugger részletes leírását a következő linken találja meg: GDB-vel történő hibakeresés