[Powered by Google Translate] GDB, GNU projekt Debugger, je mocný ladící nástroj pro C, spolu s mnoha dalšími jazyky. To vám umožní hrabat kolem uvnitř vašich programů v jazyce C, zatímco oni jsou provádění, a také vám dává možnost vidět přesně to, co se stane když váš program havaruje. Je to docela šikovný, že jo? GDB je svobodný software, a to běží na mnoha populárních UNIX a Windows-založené operační systémy, takže je to velmi rozšířený nástroj. Měli byste se naučit milovat. Gdb profesionálové mají mnohem snazší vystopování chyby než ti, kteří protloukat pomocí odhady a nekonečné množství Tiskový výstup výkazů. GDB je nástroj příkazového řádku, což znamená, že můžete pracovat s ním v terminálu vydávání příkazů pomocí klávesnice namísto klepnutím na tlačítka myší. Chcete-li spustit GDB, budete doslova jen zadejte gdb na příkazovém řádku a stiskněte klávesu Enter. Uvidíte několik řádků tištěných na obrazovku zobrazující verzi GDB, který vedete, jeho informace o autorských právech, a na konci uvidíte GDB řádku: (gdb). To vám vědět, že GDB je připraven pro příkazy. V tomto bodě, je ukončete nejdůležitější věc, vědět, jak to udělat. Naštěstí, to je docela jednoduchý. Ukončete příkaz dělá jen to. Jako zástupce, stačí použít q příliš. Jak zábavné, jak bootování GDB a pak rychle přestat kouřit, je, pojďme se teď mluví o používání GDB pomoci ladění programu. Chcete-li začít, mám program tady v factorial.c že dostane int a snaží se vypočítat jeho faktoriál. V případě, že jste ho ještě neviděli faktoriály před nebo ne pamatovat si je, Faktoriál čísla n se rovná součinu n - (n - 1), (n - 2), a tak dále - dokud nenarazíte 1. Proto, faktoriál 3 je 3 * 2 * 1, nebo 6, a faktoriál 4 je 4 * 3 * 2 * 1, nebo 24. Faktoriál nuly je zvláštní případ, je to 1, a faktoriály záporných celých čísel nejsou definovány. Každopádně, něco o mém faktoriálu programu je funky. Když jsem jej spustit, vypíše divné čísla, která mají co do činění s faktoriály. Takže, můžeme použít GDB pomoci zjistit, co se děje. GDB pracuje na spustitelné soubory, které jsou binární soubory vytvořené v procesu kompilace. To znamená, že nemůžeme běžet GDB na našem. C nebo. H soubory zdrojových kódů jako factorial.c. Chceme spustit na právě faktoriál místo. Pokud program vyžaduje nějaké argumenty příkazového řádku, toto je místo, kde bychom upřesnit. V tomto případě, faktoriál nevyžaduje žádné argumenty příkazového řádku, takže jsme jen zadejte běh nebo r pro krátké. To začne faktoriálovou běhu programu. Když program zastaví, tak jsem si moje GDB vyzve zpět. Dobře, zkusme stejnou věc znovu, faktoriál 4. Dobře, vidíme, že jsme stále stejný druh nevyžádané tady v GDB. Nyní, když program dokončil, nemůžeme jít a přístup k některé z jeho stavu, takže budeme muset začít to běží znovu předtím, než můžeme vidět, co se děje. Nicméně, potřebujeme způsob, jak zastavit, dokud je to v polovině jeho běhu. K tomu, že jsme se použít to, co se nazývá zarážku. Hraniční hodnoty říct, GDB pozastavit program na určitou funkci nebo zdrojového kódu linka takže je můžeme zkoumat stav programu, hodnoty proměnných, stav paměti a podobně, v tomto bodě. Vzhledem k tomu, já opravdu nevím, kde se věci vyvíjejí špatně, Chci jen začít ladění přímo na samém začátku, pravdu, když hlavní začíná. Budeme nastavit zarážku na začátku hlavní pomocí přerušení příkazu. Můžeme také použít b zkrátit přestávku. Začněme program běží znovu. Tady jsme na začátku hlavní, stejně jako GDB nám říká. Řádek kódu, který se chystá vykonat, ale nemá dosud je printf line. Můžeme říct, GDB k provedení tento řádek kódu a přechod na další řádek s další nebo n příkazu. Dobře, teď GDB nám říká, že jsme na GetInt řádku. Vím, že to vypadá, jako printf linka nebyla spuštěna protože nevidíme "Zadejte kladné číslo" tisk z obrazovky, ale to vlastně běží. Co vidíme, je operační systém potlačení psaní cokoliv na obrazovce dokud to absolutně musí, což proč ladění s výtisky může někdy zdát nespolehlivé. Každopádně, pojďme opět přejít na další řádek kódu a zadejte v int. Opět, pojďme typ 4. Tak to vypadá divně. Jsme na řádku 12 podle GDB, ale další řádek, který se chystá vykonat, je jen složená závorka. To znamená, že jsme jen na konci smyčky, naše udělat, zatímco smyčka ve skutečnosti, a GDB nám říká, že ukončení podmínka, a sice nikdo menší než nula, provede další. Pokud se to někdy dostane trochu matoucí, můžeme vytáhnout zdrojový kód v GDB se seznamem nebo l příkaz. To vytiskne zdrojový kód , který je soustředěný kolem trati, že jsme v současné době na. Pokud napíšeme seznam nebo l znovu, uvidíme další sada řádků vytisknout. Můžeme to udělat, dokud jsme narazila na konec souboru. Chcete-li získat zpátky tam, kde jsme byli, jsme schopni dodat seznam s číslo řádku, v tomto případě, řádek 12. Každopádně, pojďme dál. Teď jsme na 4 smyčce. Pojďme se ujistěte, že naše proměnná num obsahuje 4. Děláme to s potiskem, nebo p, příkaz. Takže, GDB nám říká, že num je skutečně ukládání 4, jak jsme očekávali. $ 1, které GDB vytiskne je speciální proměnná GDB že je nyní nastavena k ukládání číslo 4 stejně. Můžete ignorovat to pro teď, ale tyto gdb proměnné přijít superpohodlná ve více pokročilých případech, kdy chcete vzpomenout, co jste dělali v minulosti. Každopádně, pohybující se na s další, vidíme, že se rozběhnou přes smyčky for. Pojďme dál tudy s n bitu po kousku. Spíše než psaní n pokaždé, můžete také jen stiskněte enter. Pokud stisknete klávesu Enter bez zadání cokoliv, GDB jen opakuje předchozí příkaz. Takže teď jsme hit printf hovor. Vypadá to, že jsme skutečně prošli naší pro smyčce 4 krát, který je co chceme udělat, aby se násobit 1, 2, 3, a 4. Všechno vypadá, že to funguje, kromě případů, kdy jsme narazili další jsme opět stáhni obrovské množství namísto 24. Pokud se vytisknout hodnotu faktoriálu pomocí p, vidíme, že faktoriál nemá tuto masivní množství v něm. Něco to určitě špatně. V tomto bodě, i když, jsme téměř na konci programu, a to je příliš pozdě na to, opravit cokoliv. Nicméně, my můžeme restartovat program zadáním r znovu a pak y potvrďte. Teď jsme zpátky v našem zarážky na začátku main. Víme, že se vše zdá být v pořádku s čtení v n. takže můžeme přeskočit s n. Případně můžeme nastavit nový zarážku po dělat, když smyčka a skákat tam. Pojďme udělat. Vypadá to, že linka 14 přichází právě po smyčce. Pojďme nastavit zarážku tam. Je dobrým zvykem zadat název souboru v tomto breakpointů příkazu protože GDB lze zmást, pokud pracujete s více soubory. Chcete-li přesunout před tímto zarážka, budeme používat Pokračovat nebo c příkaz. Dobře, tady jsme pro smyčce. Pojďme 1 další linku do smyčky for, a pak začneme s tiskem proměnných vidět, co se děje. Pojďme se ujistěte, že i je skutečně 1, jak se očekávalo. Jo, to je všechno dobré. Co faktoriál když? Whoa, to není dobré. Máme velký záporné číslo zde. Jak se to stalo? No, podíváme-li se zpět na kód, vidíme, že nikdy inicializován, takže jsme právě dostali odpadky tam. To bude určitě shodit náš výpočet. Naštěstí, nemáme nechat GDB to opravit. Můžeme ji inicializovat přímo zde a opravit v kódu později pomocí příkazu tisku. Budeme ji inicializovat na 1, protože faktoriály nule a 1, tak 1, a pokud budeme inicializovat na nulu, pak jsme vždycky skončit s nulou jako náš výsledek. Můžete nastavit libovolnou proměnnou tuto cestu, která je super šikovný. Nyní, pojďme pokračovat náš program. Pojďme ujistit, že všechno je místo, kde to má být. Num by měl být 4, by i být 1, a faktoriálu má být 1 příliš. Můžeme zkratku tento proces a tisk všech našich lokálních proměnných s super-užitečné místních příkaz info, který vytiskne všechny naše in-působnosti lokálních proměnných. Každopádně to vypadá, že všechno, co je dobré jít. Pojďme udělat další průlet na smyčku, aby se ujistil. Dobře, všechno vypadá skvěle. Nyní můžeme použít continue příkaz jít až do konce. Sweet! 4 faktoriál vytisknout 24, jak se očekávalo. Teď můžeme jít opravit v našem kódu. Spíše než opustit z GDB, budeme používat jiný terminál kartu k tomu. Vraťme se zpět k našemu GDB kartu, nyní musíme překompilovat náš spustitelný soubor. Jedna z nejlepších věcí, o GDB je, že nemusíte opustit GDB spustit dělat. Takže nemáme držet bít staré zarážky, pojďme zakázat s, uhodli jste, příkaz disable. Tímto zakážete všechny naše zarážky. Nyní můžeme restartovat program s r a ujistěte se, že všechno je v pořádku. Vypadá to, že všechno, co je dobré jít. Faktoriál 4 tisků z 24, stejně jako jsme si mysleli. GDB je jedním z nejvíce užitečných nástrojů, které jste dostali v panelu nástrojů. Existují tuny dalších věcí, které můžete udělat s GDB, mnohem víc, než se dá dělat s jednoduchými výtisků. Příště váš program není to, co byste chtěli, zkuste GDB, aby zjistili, co se děje uvnitř. S trochou praxe, budete moci přecházet přímo na vaše chyba v žádném okamžiku. Mé jméno je Nate Hardison. To je CS50.