Nalagodzhenya za dodatnu pomoć GDB. Vyvchaemo S vykoristanny GDB Smanjenje dijete proces

G.D.B. doći do “razumnih” programa, poput onih koji “kuže” kod i odmotavaju ga redom, mijenjaju vrijednosti promjena, postavljaju kontrolne točke i mozgaju... Jednom riječju, čini sve kako bi programer za I provjerite rade li vaši programi ispravno.

G.D.B. bogata sjećanja UNIX-Takvi sustavi također provode fino podešavanje mnogih programa. Si je među njima.

Kontaktirajte nas G.D.B. unesite naredbu na terminalu

Gdb

Za prijavu G.D.B.: unesite naredbu

Odustani ili C –d

Ostale važne GDB naredbe

pokrenuti [argumenti naredbenog retka programa] Pokrenite program. break [broj retka / naziv funkcije] Postavite točku prekida programa na sljedeći red ili funkciju. sljedeći Idite u napadni red bez odlaska u sredinu funkcije. korak Idite na red koraka. Ako postoji funkcija u retku, idite na nju. lista Unesite fragment programskog koda (broj redaka oko mjesta gdje je umetnuta točka) ispis [promjena] Unesite vrijednost promjene na ekranu. info locals Unesite točne vrijednosti svih lokalnih promjena u sredini petlje, funkcije itd. prikaz [promjena] Unesite vrijednost promjene na koži kože. pomoć Prikaži popis svih postojećih GDB naredbi.

Čudimo se kako raditi s GDB-om na aplikaciji caesar.c, kao što ste vi, koji ste učinili sve za sve, već napisali prošle godine. Provjerit ćemo to na starijoj verziji, tako da vaši rezultati mogu varirati ovisno o implementaciji.

Sada idemo u mapu pset2 (mislimo da se već sjećate kako je dobiti) u "CS50 Virtual Laboratory" ili CS50 IDE. Unesite naredbu:

Gdb. /Cezar

Caesar program ima jednu funkciju, glavnu. Postavimo početnu točku programa na glavnu funkciju:

prekinuti glavni

Pokrenimo program caesar s argumentom "3":

Trčanje 13

Recimo da trebamo provjeriti vrijednosti argc:

Ispis argc

Os se može vidjeti u prozoru terminala:

Sada dovršavamo program korak po korak pomoću sljedeće naredbe. Možemo vidjeti nekoliko puta.

Ovdje promjenjivi ključ daje značenje. Provjerimo kakav značaj ima u ovom redu:

Pri prvom sljedećem kliku, promjenjivi ključ je postavljen na “0”. Zašto smo propustili broj 3? Desno je da ekipa još nije ušla u Vikonan. Ako sljedeći put unesete više puta, program će od vas tražiti da unesete tekst.

Nakon što još jednom unesemo naredbu Next, doći ćemo do sredine mentalne petlje.

Meta poboljšanje programa - uklanjanje izmjena iz koda. Zašto vi, koji znate za sve, imate priliku ući u trag taboru slavnih? sat wyconnanny, To je isto što i sam proces spoznaje (na primjer, stvaranje mentalnih prijelaza). Ovdje je vođa naš prvi pomoćnik. Naravno, C ima puno mogućnosti za pokretanje programa bez ikakvih problema: od jednostavnog printf(3) do posebnih sustava za bilježenje preko syslog mreže. U asembleru, takve metode još uvijek stagniraju, inače ćete možda morati biti oprezni s registrima, RAM dumpovima i drugim govorima, koje je mnogo lakše razviti u interaktivnom editoru. Usput, ako pišete na asemblerskom jeziku, malo je vjerojatno da ćete proći bez urednika.

Možete započeti tako da odredite prijelomnu točku, budući da već otprilike znate koji dio koda trebate slijediti. Ovo je metoda koja se najčešće koristi: postavite točku, pokrenite program i prođite kroz njega korak po korak, u isto vrijeme pazeći na potrebne promjene i registre. Također možete jednostavno pokrenuti program pod najboljim uvjetima i u slučaju da se sruši zbog pogreške segmentacije - tako da možete saznati koja je instrukcija namijenjena uskraćivanju pristupa memoriji, zatim pogledati promjenu, i tako dalje. . Sada možete ponovno slijediti ovaj kod, proći kroz njega korak po korak, stavljajući točku malo prije trenutka kvara.

Neka to bude jednostavno. Uzmimo program Hello world i prevedimo ga s potrebnim informacijama pomoću prekidača prevoditelja -g:

$ gcc -g zdravo.s -o zdravo $

Pokreni gdb:

$ gdb ./hello GNU gdb 6.4.90-debian Copyright (C) 2006 Free Software Foundation, Inc. GDB je besplatni softver koji je licenciran pod GNU Općom javnom licencom, a vi ga namjeravate mijenjati i/ili distribuirati kopije drugim ljudima. Upišite "prikaži kopiranje" da biste vidjeli uvjete. Ovo apsolutno nije jamstvo za GDB. Upišite "prikaži jamstvo" za detalje. Ovaj GDB konfiguriran je kao "i486-linux-gnu"...Korištenje host libthread_db biblioteke "/lib/tls/libthread_db.so.1". (gdb)

GDB je pokrenut, pokrenuo je sljedeći program, pogledao zaslon zahtjeva (gdb) i provjerio ima li naredbi. Želimo proći kroz program "u koracima" (način rada u jednom koraku). Da biste to učinili, morate navesti naredbu na koju se program može pokrenuti. Možete odrediti potprogram - to će biti učinjeno prije pokretanja završnih uputa za taj potprogram. Također možete odrediti naziv datoteke i broj retka.

(gdb) b glavna prijelomna točka 1 na 0x8048324: datoteka hello.s, linija 17. (gdb)

b - kratkotrajna pauza. Sve GDB naredbe mogu se skratiti jer ne stvaraju dešifriranje s dvostrukom vrijednošću. Program pokrećemo naredbom run. Ova se naredba koristi za ponovno pokretanje prethodno pokrenutih programa.

(gdb) r Pokrenite program: /tmp/hello Prijelomna točka 1, main () na hello.s:17 17 movl $4, %eax /* stavite sistemski broj write = 4 Trenutačni jezik: auto; trenutno asm (gdb)

GDB preuzima program i provjerava naredbe. Navedite naredbu vašeg programa koja će biti dodana u sljedećem koraku, funkcije koje će biti dodane u datoteku i broj retka. Za line-by-line wiki možemo koristiti dvije naredbe: step (skraćeno s) i next (skraćeno n). Naredba step završava program ulaskom u dio podprograma. Sljedeća naredba izvršava upute potprograma niti, dio po dio.

(gdb) n 20 movl $1, %ebx /* prvi parametar - za registraciju %ebx */ (gdb)

Sada su napisane upute za red 17 i razumijemo da registar %eax sadrži broj 4. Za prikaz različitih virusa na ekranu koristite naredbu print (skraćeno p ). Prilikom zamjene naredbi asemblera, GDB ima znak $replace % u unosu registra. Pogledajmo što je u %eax registru:

(gdb) p $eax $1 = 4 (gdb)

Akcija 4! GDB numerira sve izlaze izraza. Sada imamo prvi virus ($1), koji je stariji od 4. Sada do ovog virusa možete se prijaviti za njih. Također možete izvršiti jednostavne izračune:

(gdb) p $1 $2 = 4 (gdb) p $1 + 10 $3 = 14 (gdb) p 0x10 + 0x1f $4 = 47 (gdb)

Dok smo se igrali s naredbom print, već smo zaboravili kako instrukcija završava. Naredba info line prikazuje informacije o uputama u retku koda. Bez argumenata, prikazati informacije o proizvodnoj liniji.

(gdb) redak informacija Redak 20 od "hello.s" počinje na adresi 0x8048329 i završava na 0x804832e . (gdb)

Naredba popis (skraćeno l) prikazuje izlazni kod vašeg programa na ekranu. Kako se argumenti mogu proslijediti:

  • broj reda- broj retka datoteke toka;
  • datoteka: broj_reda- Broj retka za navedenu datoteku;
  • Njihove_funkcije- Imaju funkcije bez ikakve dvosmislenosti;
  • datoteka: naziv_funkcije- imaju funkcije za navedenu datoteku;
  • *adrese- adrese u memoriji, praćene potrebnim uputama.

Ako proslijedite jedan argument, naredba popis proizvodi 10 redaka izlaznog koda na istom mjestu. Prosljeđivanjem dva argumenta navodite redak na početku i redak na kraju popisa.

(gdb) l main 12 iza granica ove datoteke */ 13 .type main, @function /* main - funkcija (ne podaci) */ 14 15 16 main: 17 movl $4, %eax /* stavite broj sistemski poziv 18 write = 4 u registar %eax */ 19 20 movl $1, %ebx /* smjesti prvi parametar u registar 21 %ebx; deskriptor datoteke broj 22 stdout = 1 */ (gdb) l *$eip 0x8048329 je na hello.s:20. 15 16 main: 17 movl $4, %eax /* smjesti broj sistemskog poziva 18 write = 4 u registar %eax */ 19 20 movl $1, %ebx /* postavi prvi parametar u registar 21 %ebx; broj deskriptora datoteke 22 stdout = 1 */ 23 movl $hello_str, %ecx /* smjesti drugi parametar u registar 24 %ecx; indikator po retku */ (gdb) l 20, 25 20 movl $1, %ebx /* smjesti prvi parametar u registar 21 %ebx; broj deskriptora datoteke 22 stdout = 1 */ 23 movl $hello_str, %ecx /* smjesti drugi parametar u registar 24 %ecx; indikator po redu */25 (gdb)

Zapamtite ovu naredbu: popis $eip. Uz ovu pomoć, kasnije možete pogledati izlazni kod pored uputa koje su napisane odjednom. Zaokružimo naš program:

(gdb) n 23 movl $hello_str, %ecx /* postavlja drugi parametar u registar %ecx (gdb) n 26 movl $hello_str_length, %edx /* postavlja treći parametar u registar %edx (gdb)

Nije istina, umoran sam od guranja n? Ako jednostavno pritisnete Enter, GDB će ponoviti preostalu naredbu:

(gdb) 29 int $0x80 /* wiklikati pererivannya 0x80 */ (gdb) Zdravo, svijete! 31 movl $1, %eax /* wiki broj sustava izlaz = 1 */ (gdb)

Još jedna zgodna naredba, o plemstvu Yaku Varto - info registri. Naravno, í̈ se može skratiti na i r . Možete mu proslijediti parametar - popis registara koje je potrebno konfigurirati. Na primjer, ako se prijava generira u zaštićenom načinu rada, vjerojatno nećemo propustiti vrijednosti registara segmenata.

(gdb) info registri eax 0xe 14 ecx 0x804955c 134518108 edx 0xe 14 ebx 0x1 1 esp 0xbfabb55c 0xbfabb55c ebp 0xbfabb5a8 0xb0 1208566592 eip 0x804833 a 0x80 4833a eflags 0x246 [PF ZF IF] cs 0x73 115 ss 0x7b 123 ds 0x7b 123 es 0x7b 123 fs 0x0 0 gs 0x33 51 (gdb) info registri 0xe 14 ecx 0x804955c 134518108 edx 0x e 14 ebx 0x1 1 esp 0xbfabb55c 0xbfabb55c ebp 0xbfabb5a8 0xbfabb5a8 esi 0x0 0 edi 0xb7f6bcc0 -1208566592 eip 0x804833a 0x804 eflags 0x246 [PF ZF IF] (gdb)

Dakle, osim registara imamo i

Danas ćete zaraditi još jedan krok s desne strane
Vivchennya Linux sustavi. Reći ću vam o osnovama
Zaposlite se s gdb-om. Nakon što ih svladate, možete razumjeti kako bilo koji program radi i napisati vlastite podvige.

Možda ste svi čuli za takav govor kao serviser, gdb - to je isto što i popravljač. GDB-GNU
Debugger. Ovo je slično SoftICE-u za Windows (za one koji ne znaju, najpopularniji je i, po mom mišljenju, postao je najkorisniji), samo pod
Linux sustavi. Na desnoj strani nema toliko dokumenata koji bi demonstrirali rad ovog govora i sam sam ga svladao. Otje,
Dokument će opisati osnovne gdb naredbe. Sve će biti prikazano na primjeru. I kao guzica, odlučio sam uzeti program da. Za one koji ne znaju, ovaj program jednostavno ispisuje simbol 'y' do beskraja, pa sam odlučio naučiti ispisivati ​​ne taj simbol, već red 'XAKEP', što bi bilo zabavnije.

Eto, sad je sve u redu. Sam uređivač počinje ovako:

Ako možete unijeti različite parametre, moći ćemo pratiti program:

# gdb /usr/bin/yes

Možete pregledati osnovne datoteke za koje morate unijeti sljedeće:

# gdb /usr/bin/yes jezgra

Umjesto toga možda ćete trebati i naredbu za pregled registara:

(gdb) info registri

ili tako (kratka verzija)

Sada pogledajmo kako je robiti preskočen. Žuri se
točke zabune, točke prenapučenosti i točke opreza. Točnije, želio bih se usredotočiti na točke učenja. Može se instalirati na:

(gdb) break function - Zupinity prije ulaska u funkciju
(gdb) break *adress - Pošaljite prije nego što slijedite upute na adresi.

Nakon instalacije možete pogledati sve točke za koje koristite naredbu:

(gdb) info stanka

Zatim možete izbrisati ove točke:

(gdb) jasna prijelomna točka - de break je naziv prijelomne točke
(na primjer, funkcija ili adresa)

Još jedna važna značajka je mogućnost automatskog prikaza različitih vrijednosti kada programi završe. Koja je svrha naredbe display:

(gdb) vrijednost prikaza/formata, gdje je format format prikaza, a vrijednost format koji treba prikazati.

Za rad sa slikama predviđene su sljedeće naredbe:

(gdb) info display - prikazuje informacije o prikazu
(gdb) delete num - de num – brisanje elemenata s indeksom
br

Ovo će biti mali vodič timovima za razumijevanje glavne ideje.
Dalje na stražnjici bih želio pokazati još malo. I zapamtite - ovdje sam dao samo mali dio svih mogućnosti gdb-a, zapravo ima ih stotinu puta više, stoga pročitajte i počnite.
Kao što sam obítsya, nećemo trebati prog da. Put na vašem autu možda nećete izbjeći s mojim, sve će biti u operativnom sustavu koji koristite, ako ubrzate pretraživanje (naredba
pronaći).

# gdb /usr/bin/yes

Nakon lansiranja primit ćete detaljne informacije.

GNU gdb 19991004




Ovo apsolutno nije jamstvo za GDB. Upišite "prikaži jamstvo" za detalje.
Tsei GDB buv podešen kao "i386-redhat-linux"...
(nisu pronađeni simboli za otklanjanje pogrešaka)...

Budući da da, možemo prikazati beskonačno mnogo simbola, bilo bi bolje da ih ne preuzimamo iz editora, ali opet
programi se mogu usmjeriti na drugu konzolu. Otvorite novi terminal, upišite who is i i otvorite naziv konzole. Ti si kriv što si izašao
Pogledajmo sliku:

Os je sada jednostavno povezana s njim.

(gdb) tty /dev/pts/1

A sada stavimo točku na funkciju puts() i kako bismo vam olakšali razumijevanje man-informacija o funkciji (man naredba
stavlja)

#uključi
int stavlja (const char * s);
puts() zapisuje niz s i završni novi red u std
van.

Kao što vidite, funkcija se primjenjuje na redak s kako je prikazan. Ta osovina je ono što nam treba. Još uvijek smo zapeli na tome.

(gdb) break stavlja
Prijelomna točka 1 na 0x8048698

Í pokrenite sam program, tako da provjerite gdb dokove i ne zaboravite kliknuti na funkcije.

(gdb)r
Pokretanje programa: /usr/bin/yes
Prijelomna točka 1 na 0x4006d585: datoteka ioputs.c, redak 32.

Prijelomna točka 1, 0x4006d585 u _IO_puts (str=0x8048e59 "y") na ioputs.c:32
32 ioputs.c: Nema takve datoteke ili direktorija.
1: x/i $eip 0x4006d585<_IO_puts+21>: mov 0x8(%ebp),%esi

Oh, i os je postala čudo, stvorivši prijelomnu točku. Ono što je nama važno – a bitno nam je nešto drugo, poput parametra funkcije, odnosno adrese na kojoj bi se ona trebala nalaziti. Što ti sada treba?
zaraditi novac? Tako je, pošaljite podatke na ovu adresu. Uz to ćemo dodati još par vlastitih simbola.

(gdb) set (char)0x8048e59="X"
(gdb) set (char)0x8048e5a="A"
(gdb) set (char)0x8048e5b="K"
(gdb) set (char)0x8048e5c="E"
(gdb) set (char)0x8048e5d="P"

E, sad se čudimo našem vitviru. Što leži u sjećanju:

(gdb) x/3sw 0x8048e59
0x8048e59<_IO_stdin_used+437>: "XAKEP\004\b"
0x8048e61<_IO_stdin_used+445>: ""
0x8048e62<_IO_stdin_used+446>: ""

Sada možemo vidjeti našu prijelomnu točku:

(gdb) info stanka
Num Type Disp Enb Adresa Što
1 prijelomna točka zadrži y 0x4006d585 u _IO_puts na ioputs.c:32
prijelomna točka već je postignuta 1 put
(gdb) jasno stavlja
Izbrisana prijelomna točka 1

Í nastavi viconny, tako da možeš uživati ​​u rezultatu:

To je sve. Očigledno.

(gdb)q
Program radi. Ipak izaći? (y ili n)y

Kada praksa završi, odlučite sami i zapamtite da je problem u vašem životu SVE.
Osovine robota su:

Potvrda prije ovog procesa:

//pokreni gdb
hack@exploit:~ > gdb
GNU gdb 4.18
Autorska prava 1998 Free Software Foundation, Inc.
GDB je besplatni softver koji podliježe GNU Općoj javnoj licenci i
dobrodošli da ga mijenjate i/ili distribuirate njegove kopije pod određenim uvjetima.
Upišite "prikaži kopiranje" da biste vidjeli uvjete.
Ovo apsolutno nije jamstvo za GDB. Upišite "prikaži jamstvo" za
pojedinosti.
Qia GDB je konfiguriran kao "i386-suse-linux".
(gdb) priložiti "pid"
(gdb) 1127 // priloži primjer

Traži memoriju:

(gdb) x/d ili x "adresa" prikazuje decimalnu vrijednost
(gdb) x/100s "adresa" prikazuje sljedećih 100 decimala
(gdb) x 0x0804846c prikaži decimalnu vrijednost na 0x0804846c
(gdb) x/s "adresa" prikazuje nizove na adresi
(gdb) x/105 0x0804846c prikaži 105 nizova na 0x0804846c
(gdb) x/x "adresa" prikazuje heksadecimalnu adresu
(gdb) x/10x 0x0804846c prikaži 10 adresa na 0x0804846c
(gdb) x/b 0x0804846c
(gdb) x/10b 0x0804846c-10 prikaži bajt na 0x0804846c-10
(gdb) x/10b 0x0804846c+20 prikaži bajt na 0x0804846c+20
(gdb) x/20i 0x0804846c prikaži 20 uputa za asembler na adresi

Popis svih odjeljaka u kompiliranoj datoteci:

(gdb) odjeljci s informacijama o održavanju // or
(gdb) mai i s

Izvršna datoteka:
`/home/hack/homepage/challenge/buf/basic", vrsta datoteke
vilenjak32-i386.
0x080480f4->0x08048107 na 0x000000f4: .interp ALLOC

0x08048108->0x08048128 na 0x00000108: .note.ABI-oznaka
ALLOC LOAD READONLY DATA HAS_CONTENTS
0x08048128->0x08048158 na 0x00000128: .hash ALLOC
UČITAJ PODATAKA SAMO ZA ČITANJE IMA SADRŽAJ
0x08048158->0x080481c8 na 0x00000158: .dynsym ALLOC
UČITAJ PODATAKA SAMO ZA ČITANJE IMA SADRŽAJ
0x080481c8->0x08048242 na 0x000001c8: .dynstr ALLOC
UČITAJ PODATAKA SAMO ZA ČITANJE IMA SADRŽAJ
0x08048242->0x08048250 na 0x00000242: .gnu.verzija
DODJELA UČITAJ PODATKE SAMO ZA ČITANJE
IMA_SADRŽAJA

Shlyub na adresi:

(gdb) rastaviti glavni
Dump asemblerskog koda za glavnu funkciju:
0x8048400

: pritisnite %ebp
0x8048401 : pomak %esp,%ebp
0x8048403 : sub $0x408,%esp
0x8048409 : dodajte $0xfffffff8,%esp
0x804840c : mov 0xc(%ebp),%eax
0x804840f : dodajte $0x4,%eax
0x8048412 : mov (%eax),%edx
0x8048414 : pritisnite %edx
0x8048415 : lea 0xfffffc00(%ebp),%eax
...

(gdb) break *0x8048414 // primjer
Prijelomna točka 1 na 0x8048414
(gdb) break main // primjer
Prijelomna točka 2 na 0x8048409
(gdb)

GNU Debugger je prijenosni alat za GNU projekt koji radi na mnogim sustavima sličnim UNIX-u i pokreće širok raspon softverskih programa, uključujući C, C++, Adu i Fortran. GNU Debugger je softverski program koji je licenciran pod GNU Općom javnom licencom.

Temeljen na GNU Debuggeru koji je napisao Richard Stallman 1988. Bio je temeljen na DBX editoru koji je dolazio s BSD distribucijom. Od 1990. do 1993. rock. Projekt je predvodio John Gilmore tijekom svoje rane karijere u Cygnus Solutions. Razvoj trenutno koordinira GDB Steering Committee, podružnica Free Software Foundation.

Tehnički detalji GNU Debuggera

  • Značajke

GNU Debugger nudi sjajne mogućnosti za kontrolu softverskih programa u računalima. Korisnici mogu mijenjati interne programe i funkcije poziva neovisno o originalnom ponašanju programa. GNU Debugger može analizirati komprimirane datoteke u a.out, COFF formatu (uključujući Windows formatirane datoteke), ECOFF, XCOFF, ELF, SOM i izvući korisne informacije iz stabs, COFF, ECOFF, DWARF, DWARF2 formata. Format DWARF2 nudi najveći potencijal za poboljšanje.

GNU Debugger se aktivno razvija. Na primjer, verzija 7.0 dodala je značajku "revolving kredita", koja vam omogućuje da gledate proces dekonstrukcije da vidite što se dogodilo. Također u verziji 7.0 dodana je podrška za skriptiranje na .

Za rad s GNU Debuggerom stvoreni su drugi razvojni alati, na primjer, memorijski senzori.

  • Multiplatforma i podrška za nove sustave

GNU Debugger se može kompajlirati da podržava programe za više platformi i skače između njih tijekom sesije koja se izvodi. Procesori koje podržava GNU Debugger (2003): Alpha, ARM, H8/300, System/370, System/390, x86 i x86-64, IA-64 (Itanium), Motorola 68000, MIPS, PA-RISC, PowerPC, SuperH , SPARC, VAX, A29K, ARC, AVR, CRIS, D10V, D30V, FR-30, FR-V, Intel i960, M32R, 68HC11, Motorola 88000, MCORE, MN10200, MN10300, NS32K, NS32K. (Više neće biti novih izdanja koja će podržavati bilo koje od njih.) Sve platforme na kojima GNU Debugger ne može raditi, sve dok je sustav instaliran, mogu podržavati korištenje ugrađenog simulatora (ARM, AVR procesori), ili dodati ki za njih može se kompajlirati s posebnim potprogramima kako bi se osigurala izvrsna izvedba pod GNU Debuggerom koji radi na računalu trgovca. Ulazna datoteka za poboljšanje, u pravilu, nije dvostruka datoteka koja se bljeska, već datoteka u jednom od formata koji podržava korisne informacije, posebno ELF, od kojih se dvije kombiniraju uz pomoć posebnog koda uslužnih programa za firmware.

  • U blizini

Kada se konfigurira na daljinu, GNU Debugger radi na jednom stroju, a program koji se mijenja radi na drugom. Komunikacija se ostvaruje pomoću posebnog protokola preko serijskog porta ili TCP/IP. Protokol za interakciju s debuggerom specifičan je za GNU Debugger, a izlazni kodovi potrebnih potprograma uključeni su u arhive debuggera. Kao alternativa, ciljna platforma može pokrenuti program gdbserver, koji koristi isti protokol kao GNU Debugger paket, koji pruža funkcije niske razine za instalacijsku točku i pristup registrima i memorijama. yati.

Ovaj način je dizajniran za interakciju s ugrađenim značajkama jezgre Linuxa KGDB. Uz ovu pomoć, programer može prilagoditi kernel kao primarni program: instalirati memorijske točke, raditi kroz wiki kod i pregledati promjene. Upravitelj aplikacija sastoji se od dva stroja povezana preko Etherneta ili serijskog kabela, jedan pokreće GNU Debugger, a drugi pokreće kernel koji se razvija.

  • Koristuvalnytskyi sučelje

U skladu s ideologijom Free Software Foundationa, GNU Debugger umjesto grafičkog sučelja daje mogućnost povezivanja s modernim IDE-ima, drugim grafičkim ljuskama ili korištenjem standardnog tekstualnog sučelja konzole. Da biste ga dobili iz vanjskih programa, možete upotrijebiti jezik reda teksta (kao što je raščlanjen u prvim verzijama DDD ljuske), jezik teksta gdb/mi ili sučelje za jezik.

Sučelja kao što su DDD, cgdb, GDBtk/Insight i GUD mod stvorena su u . Sljedeći IDE-ovi mogu komunicirati s GNU Debuggerom:

Za učinkovit razvoj programa, tijekom kompilacije morate generirati korisne informacije. Ove vrijedne informacije spremaju se u objektnu datoteku; Opisuje vrstu podataka promjena kože ili funkcija te odnos između brojeva redaka izlaznog teksta i adresa koda koji završava.

Da biste zatražili generiranje korisnih informacija, unesite `-g' prekidač prilikom pokretanja prevoditelja.

Većina C kompajlera ne može obraditi `-g" i `-O" sklopke u isto vrijeme. S takvim prevoditeljima ne možete stvoriti optimizirane datoteke koje sadrže vrijedne informacije.

GCC, GNU C kompajler, potiče `-g" sa ili bez `-O" za poboljšanje optimiziranog koda. Preporučujemo vam da kao prvo Koristili ste `-g' prilikom prevođenja programa. Možda mislite da je vaš program ispravan, ali nema osjećaja uspjeha.

Ako pokrenete svoj program u sredini prozora koji podržava procese, run stvara lagani proces, a taj proces završava vaš program. (Za sustave koji ne podržavaju procese, run će ići na početak vašeg programa.)

Vikonanny programi leže u obliku informacija, koje su izvedene iz procesa koji ih je generirao. GDB pruža načine za specificiranje informacija koje trebate generirati prije pokretanje programa. (Možete ih promijeniti nakon pokretanja, inače će se takve promjene primijeniti na vaš program tek kada ga pokrenete.) Ove informacije mogu se podijeliti u sljedeće kategorije: Parametri Odredite parametre koje vaš program treba proslijediti, kao što su parametri naredbe za pokretanje. Budući da vaš sustav ima ljusku, ona se koristi za prosljeđivanje parametara, tako da kada ih opisujete, možete koristiti druge stvari (kao što je otvaranje predložaka ili zamjena zamjenskih). Na Unix sustavima, možete kontrolirati koja će ljuska biti zamijenjena za SHELL međuware. Odjeljak 4.3 Argumenti za vaš program. Sereda. Provjerite gradi li vaš program jezgru u GDB-u ili možete koristiti naredbe GDB set environment i unset environment da promijenite količinu jezgre koja ulazi u njega. odjeljak 4.4 Radna sredina vašeg programa. Radni imenik Vaš program izbacuje svoj radni direktorij u GDB. Radni direktorij GDB-a možete umetnuti pomoću naredbe cd. odjeljak 4.5 Radni direktorij vašeg programa. Standardni uvod i prikaz. Provjerite koristi li vaš program iste uređaje za standardni ulaz i izlaz kao GDB. Možete preusmjeriti svoj unos na naredbu za pokretanje ili koristiti naredbu tty za instaliranje drugog uređaja za vaš program. odjeljak 4.6 Uvođenje i puštanje programa. Unaprijed: Ako želite da preusmjeravanje ulaza i izlaza radi, ne možete odabrati kanale za prijenos izlaznih podataka iz programa koji pokreću druge programe; Ako ovo pokušate, proći ćete kroz cijeli GDB dok ne instalirate krivi program.

Kada izdate naredbu za pokretanje, vaš se program počinje rušiti. div. odjeljak 5. Razvoj i nastavak programa, kako biste razgovarali o tome kako poboljšati svoj program. Čim se vaš program pokrene, možete pozvati funkcije programa, poput naredbi za ispis ili pozivanje. odjeljak 8. Praćenje podataka.

Kada se promijeni vrijeme modifikacije vaše datoteke simbola, kada GDB počne čitati simbole, traži svoju tablicu simbola i ponovno ih čita. Na ovaj način GDB pokušava sačuvati vaše precizne podatke.

4.3 Argumenti za vaš program

Prva stvar je da GDB treba raditi nakon pripreme dok se ne uspostavi naznačeni proces - to je pogrešno. Možete nadzirati i mijenjati proces izvršenja koristeći GDB naredbe, ako su dostupne, ako pokrećete procese koristeći run. Možete umetnuti sidrišne točke; Možete napustiti program jedan po jedan i nastaviti s izvornim napuštanjem, a možete promijeniti i podatkovna područja. Ako želite nastaviti proces uređivanja nakon pridruživanja novom GDB-u, možete koristiti naredbu za nastavak. detach Nakon što ste završili s postavljanjem procesa akvizicije, možete koristiti naredbu detach da ga spojite na GDB. Proces se nastavlja njegovom pobjedom. Nakon detach naredbe, ovaj proces i GDB ponovno postaju potpuno neovisni, a vi ste spremni pridružiti se ili pokrenuti drugi proces koristeći run. detach se ne ponavlja ako ponovno upišete RET nakon napuštanja naredbe.

Ako izađete iz GDB-a ili upotrijebite naredbu run dok imate pokrenut novi proces, ubit ćete cijeli proces. Za promocije, GDB će tražiti potvrdu ako namjeravate dovršiti jedan od ovih govora; Možete kontrolirati trebate li potvrdu ili ne pomoću naredbe za potvrdu (odjeljak 15.6 Nepotrebna prethodna obavijest).

4.8 Oduzimanje dječjih procesa

kill Pronađite podređeni proces u kojem je vaš program instaliran pod GDB-om.

Ova naredba je korisna ako želite poboljšati dump memorije, a ne proces koji se sprema. GDB ignorira sve memorijske ispise dok program izlazi.

Na nekim operativnim sustavima program se ne može instalirati u GDB sve dok u njemu imate čvorove instalirane od strane administratora. U ovoj situaciji možete upotrijebiti naredbu kill kako biste omogućili administratoru da prekine vaš program.

Naredba kill također je korisna ako želite ponovno kompajlirati i ponovno povezati svoj program, jer na bogatim sustavima nije moguće modificirati datoteku koja se kompajlira na kraju procesa. U ovom slučaju, kada sljedeći put unesete run, GDB će primijetiti da je datoteka promijenjena i ponovno pročitati tablicu simbola (dok pokušava spremiti vaše bodove).