A GNU Debugger egy program hibakeresésére, összeomlás elemzésére szolgál, vagy annak megtekintéséhez, hogy a program mit csinál egy adott ponton. A GNU Project fejlesztette ki az 1980-as években, és az egyik legszélesebb körben használt parancssori hibakereső, valamint az egyik legnépszerűbb GNU szoftver volt.
Először írjunk egy kis C-programot, amit majd hibakeresünk. A kezdéshez hozzon létre egy újat .c
fájl használatával vim
vagy tetszőleges szerkesztő:
vim teszt.c
Készítse el a következő C programot:
#include int main() { int i = 5; float f = 5,5 i = i + 3; f = f + 2,2; printf("I és f értéke: %d és %f\n", i, f); visszatérés 0; }
nyomja meg Menekülni
vim parancs módba lépéshez. Ezután írja be :wq
a program mentéséhez és a kilépéshez.
Fordítsa le és nézze meg, hogy a program fut-e:
gcc test.c -o teszt ./test Az i és f értéke: 8 és 7,700000
A programban a hibakeresési támogatás engedélyezéséhez -vel állítjuk össze -g
zászló. Ha a zászlót nem használja, a felhasználó továbbra is hibakeresheti a programot, bár korlátozott lehetőségekkel.
gcc teszt.c -g -o teszt
A hibakeresés megkezdéséhez futtatható fájlunk teszt
ban ben gdb
, futunk:
gdb teszt
Megnyílik a gdb
konzol, ahová beírhatja a gdb
parancsokat. A parancsok listájának megtekintéséhez használja a Segítség
parancs.
$(gdb) help Parancsosztályok listája: álnevek -- Egyéb parancsok álnevei töréspontok -- Program leállítása bizonyos pontokon adatok -- Adatfájlok vizsgálata -- Fájlok belső adatainak meghatározása és vizsgálata -- A karbantartási parancsok homályosak -- A futó funkciók homályos -- A programverem futtatása -- A verem állapotának vizsgálata -- Állapotlekérdezések támogatása -- Támogatási létesítmények nyomkövetési pontjai -- A program végrehajtásának nyomon követése a program leállítása nélkül, felhasználó által definiált -- Felhasználó által definiált parancsok Írja be a "help" kifejezést, majd egy osztály nevét az adott osztály parancsainak listájához. Írja be a „help all” parancsot az összes parancs listájához. Írja be a „help” szót, majd a parancs nevét a teljes dokumentációért. Írja be az "apropos szót" a "szó" szóhoz kapcsolódó parancsok kereséséhez. A parancsnevek rövidítése megengedett, ha egyértelmű.
Utána írhatsz súgó osztály_neve
az adott osztályhoz tartozó parancsok megtekintéséhez. Parancsok részkarakterlánc használatával történő kereséséhez használja a apropos részkarakterlánc
.
Ha egy töréspontot szeretne beállítani, amikor a program belép egy függvénybe, fuss:
$(gdb) break fő
Itt töréspontot állítunk be a kódunk egyetlen függvényénél, pl. fő-
. Használja a parancsot fuss
a program végrehajtásához a következő töréspontig vagy a kilépésig.
$(gdb) futni
Ha egy töréspontot szeretne beállítani egy függvény adott helyén, használat:
szünet *fő + 4
Ez beállít egy töréspontot a fő függvény 4. sorában.
Most, átlépni a programfolyamon a következő kódsorra, egyszerűen futtassa a lépés
parancs.
$(gdb) 5. lépés: float f = 5,5;
Egy változó tartalmának megjelenítéséhez, fuss kijelző
.
$(gdb) kijelző i 6: i = 5
Egy változó tartalmának módosításához amely szükséges lehet egy program futtatásának elemzéséhez egy változó meghatározott értékei mellett, a run set variable =Kifejezés
.
$(gdb) változó i=10 $(gdb) kijelző i 7: i = 10
Itt a „kifejezés” bármilyen érvényes (számtani / logikai) kifejezés lehet. Az egyszerűség kedvéért csak egy másik értéket (10) rendelünk a változóhoz én
.
A program összeállítási kódjának kinyomtatásához használja a parancsot disassemble functionname
:
Csak használd szétszedni
a teljes program összeállítási kódjának kinyomtatásához. Jegyezze meg a nyilat az összeállítás kód egy adott soránál. Azt jelzi, hogy a hibakeresési munkamenet jelenleg szünetel az adott memóriahelyen (azaz azon a kódsorban).
Ha a hibakeresőt egy adott kódsorra szeretné ugrani, fuss:
$(gdb) jump *main + 2 Folytatás 0x400528-nál. 2. töréspont, 0x000000000040052a főben () itt: test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i =
Ez arra készteti a hibakeresőt, hogy a függvény 2. kódsorának memóriahelyére ugorjon fő-
. Vegye figyelembe, hogy itt a fő elejétől a közvetlenül a második helyre ugrottam. Tehát változó én
soha nem volt beállítva, ami azt eredményezi, hogy a hibakereső hibát dob, hogy nem tud hozzáférni a változó címén lévő memória tartalmához én
.
Ezek azok az alapvető parancsok, amelyek segíthetnek a végrehajtható fájlok hibakeresésének megkezdésében Linux alatt. Reméljük, hogy az oldalon található információkat hasznosnak találja.