A GNU Debugger használata Linuxban

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.