Jak se dá jít o pochopení GNU zdrojový kód?

hlasů
14

Je mi to opravdu líto, jestli to zní trochu hloupý. Právě jsem dočetl K & R a pracoval jsem na některá cvičení. Letos v létě, na můj projekt, Přemýšlím o opětovné zavedení nástroj linux rozšířit moje chápání C dál, takže jsem stáhnul zdroj pro GNU tar a sed, protože oba se vám zdá zajímavý. Nicméně, mám problémy vám porozumět, kde to začíná, kde je hlavním implementace, kde jsou všechny podivné makra přišli, atd.

Mám spoustu času, takže to není opravdu problém. Mám seznámit se s GNU toolchain (tj. Dělat, binutils, ..), první, aby pochopili programy? Nebo možná bych měl začít s něčím trochu menší (v případě, že je taková věc)?

Mám trochu zkušeností s Java, C ++ a Python-li, na čem záleží.

Dík!

Položena 16/06/2010 v 07:18
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
12

Programy GNU velký a komplikovaný. Velikost GNU Hello World ukazuje, že i ty nejjednodušší GNU projekt potřebuje hodně kódu a konfigurace kolem něj.

Tyto Autotools jsou těžké pochopit, pro začátečníka, ale nemusíte se jim porozumět přečíst kód. Dokonce i když si upravit kód, většinu času, můžete jednoduše spustit make kompilovat změny.

Číst kód, budete potřebovat dobrý editor (VIM, Emacs) nebo IDE (Eclipse) a některé nástroje, které procházet zdroje. Projekt tar obsahuje adresář src, že ​​je to dobré místo pro start. Program vždy začínat hlavní funkcí, takže se

grep main *.c

nebo použít IDE hledat pro tuto funkci. Je v tar.c. Nyní přeskočit všechny inicializační věci, dokud

/* Main command execution.  */

Tam, uvidíte přepínač pro dílčí příkazy. Pokud předat -x to dělá to, pokud předat -c to dělá, že, atd. Jedná se o větvení konstrukce pro tyto příkazy. Chcete-li vědět, co tato makra jsou běh

grep EXTRACT_SUBCOMMAND *.h

tam můžete vidět, že jsou uvedeny v common.h.

Níže EXTRACT_SUBCOMMAND vidíte něco vtipného:

read_and (extract_archive);

Definice read_and () (opět získán grep):

read_and (void (*do_something) (void))

Jediný parametr je ukazatel funkce jako zpětné volání, takže read_and bude pravděpodobně něco přečíst a pak volání funkce extract_archive. Opět platí, že grep na něj a uvidíte toto:

  if (prepare_to_extract (current_stat_info.file_name, typeflag, &fun))
    {
      if (fun && (*fun) (current_stat_info.file_name, typeflag)
      && backup_option)
    undo_last_backup ();
    }
  else
    skip_member ();

Všimněte si, že skutečná práce se stane, když volá fun. funje opět ukazatel funkce, která je stanovena v prepare_to_extract. funmohou poukazovat na extract_file, který dělá skutečné psaní.

Doufám, šel jsem ti hodně přes to a je ukázáno, jak se lze pohybovat pomocí zdrojového kódu. Neváhejte mě kontaktovat, pokud máte příbuzné otázky.

Odpovězeno 16/06/2010 v 07:41
zdroj uživatelem

hlasů
7

Problém s programy, jako je tara sedje dvojí (to je jen můj názor, samozřejmě!). Za prvé, jsou oba opravdu stará . To znamená, že jsme měli více lidí udržovat je v průběhu let s různými styly a kódování různých osobností. Pro GNU utilit, je to většinou docela dobře, protože obvykle prosadit poměrně konzistentní styl kódování, ale je to stále problém. Druhým problémem je, že jsou neuvěřitelně přenosný . Obvykle „přenosnost“ je vnímán jako dobrá věc, ale když převezen do extrémů, znamená to, že váš codebase končí plný malých hacků a triky, jak vyřešit obskurní chyby a rohových případy jednotlivých kousků hardware a systémů. A programů tak široce převedených as tara sedto znamená, že je tu spousta rohových případů a obskurní hardware / kompilátory / OS vzít v úvahu.

Pokud se chcete naučit C, pak bych řekl, je nejlepší místo na startu se nesnaží studovat kód, který jiní psali. Spíše se snaží psát kód sami. Pokud opravdu chcete začít s existující codebase, vybrat ten, který je aktivně udržována, kde můžete vidět změny, které jiní lidé dělají , jak dělají jim , sledovat spolu v diskusích o e-mailové konference a tak dále.

Díky dobře zavedených programů, jako jsou tara sed, vidíte výsledek diskusí, které by se stalo, ale nemůžete vidět, jak rozhodnutí Softwarový design a změny jsou prováděny v reálném čase. To se může stát pouze aktivně udržovaným softwaru.

To je jen můj názor samozřejmě, a můžete vzít s zrnko soli, pokud se vám líbí :)

Odpovězeno 16/06/2010 v 07:38
zdroj uživatelem

hlasů
5

Proč ne stáhnout zdroj z Coreutils ( http://ftp.gnu.org/gnu/coreutils/ ) a podívat se na nástroje, jako je yes? Méně než 100 řádků kódu C a plně funkční, užitečný a skutečně základní část softwaru GNU.

Odpovězeno 16/06/2010 v 07:49
zdroj uživatelem

hlasů
4

GNU Dobrý den, je pravděpodobně nejmenší, nejjednodušší GNU program, a je snadné pochopit.

Odpovězeno 16/06/2010 v 07:36
zdroj uživatelem

hlasů
1

Naučte se používat grep , pokud nechcete to už vědí, a používat jej pro hledání hlavních funkcí a všechno ostatní, co vás zajímá. Také možná budete chtít použít při procházení kódu nástroje, jako ctags nebo Cscope který může také integrovat s vim a emacs nebo použít IDE, pokud se vám líbí, že lepší.

Odpovězeno 16/06/2010 v 07:41
zdroj uživatelem

hlasů
1

Vím, že někdy je to bordel procházet C kód, a to zejména pokud nejste seznámeni s tím. Navrhuji použít nástroj, který vám pomůže procházet funkce, symboly, makra, atd. Pak se podívejte na funkci main ().

Musíte se seznámit s nástroji, samozřejmě, ale nemusíte se stal odborníkem.

Odpovězeno 16/06/2010 v 07:37
zdroj uživatelem

hlasů
0

Vyznat se v nějakém kódu, který využívá velké množství maker, užitné funkce, atd, může být těžké. Aby bylo možné lépe procházet kód náhodné C nebo C ++ software, navrhuji tento přístup, což je to, co jsem obvykle používají:

  1. Nainstalovat nástroje pro vývoj Qt a Qt Creator

  2. Stáhnout zdrojové kódy, které chcete kontrolovat, a jejich nastavení pro kompilaci (obvykle jen ./configurepro GNU věci).

  3. Spustit qmake -projectv kořenové zdrojového adresáře, ke generování Qt .prosoubor Qt Creator.

  4. Otevřete .prosoubor v Qt Creator (nepoužívat stínovou postavu, když se zeptá).

  5. Jen pro jistotu, že s ohledem Qt Creator projekty, odstraňte výchozí stavět kroky. .proSoubor je jen pro navigaci uvnitř Qt Creator.

  6. Volitelné: nastavit vlastní sestavení a spustit kroky, chcete-li vytvořit a spustit / ladění pod Qt Creator. Není potřeba pouze pro navigaci.

  7. Použít Qt Creator procházet kód. Všimněte si zejména lokátor (kb zkratku Ctrl + K) najít věci jménem a „následovat symbol pod kurzorem“ (kb zkratku F2), a „najít zvyklosti“ (kb zkratku Ctrl + Shift + U).

Odpovězeno 03/09/2013 v 13:07
zdroj uživatelem

hlasů
0

Navrhuji pomocí Ctags nebo cscope pro procházení. Můžete je použít s vim / emacs . Oni jsou široce používány v open-source světě.

Měly by být v úložišti každé větší linuxové distribuce.

Odpovězeno 16/06/2010 v 11:23
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more