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

    Kapcsolódó cikkek