## Kostry úloh

Pracujete-li na studentském serveru ‹aisa›, můžete pro překlad
jednotlivých příkladů použít přiložený soubor ‹makefile›, a to
zadáním příkazu

    $ make příklad

kde ‹příklad› je název souboru bez přípony (např. tedy ‹make
e1_factorial›). Tento příkaz postupně:

 1. přeloží Vaše řešení překladačem ‹clang›,
 2. spustí přiložené testy.

Selže-li některý krok, další už se provádět nebude. Povede-li se
překlad v prvním kroku, v pracovním adresáři naleznete spustitelný
soubor s názvem ‹příklad›, se kterým můžete dále pracovat (např. ho
ladit/krokovat nástrojem ‹gdb›).

Existující přeložené soubory můžete smazat příkazem ‹make clean›
(vynutíte tak jejich opětovný překlad a spuštění všech kontrol).

### Textový editor

Na stroji ‹aisa› je k dispozici jednoduchý editor ‹micro›, který má
podobné ovládání jako klasické textové editory, které pracují
v grafickém režimu, a který má slušnou podporu pro práci se
zdrojovým kódem. Doporučujeme zejména méně pokročilým. Další
možností jsou samozřejmě pokročilé editory ‹vim› a ‹emacs›.

Mimo lokálně dostupné editory si můžete ve svém oblíbeném editoru,
který máte nainstalovaný u sebe, nastavit režim vzdálené editace
(použitím protokolu ‹ssh›). Minimálně ve VS Code je takový režim
k dispozici a je uspokojivě funkční.

### Vlastní prostředí

Každý příklad je zcela obsažen v jednom standardním zdrojovém
souboru, proto je jejich překlad velmi jednoduchý. Pravděpodobně
každé IDE zvládne s příklady bez problémů pracovat (spouštět, ladit,
atp.), musí ale běžet na systému typu POSIX (splňují všechny OS krom
Windows – zde ale můžete využít WSL a případně jeho
«integraci do VS Code¹»).

Krom IDE můžete také použít dodaný soubor ‹makefile›, pouze si
v nadřazené složce (tzn. «vedle» složek ‹01›, ‹02›, atd.) vytvořte
soubor ‹local.mk›, ve kterém nastavíte, jak se na Vašem systému
spouští překladače C a C++ (proměnné ‹CC› a ‹CXX›). Můžete
samozřejmě příklady překládat a kontrolovat i ručně.

¹ ‹https://code.visualstudio.com/docs/remote/wsl›

### Virtualizace a trasování

Přeložíte-li příklady pomocí příkazu ‹make› na stroji ‹aisa›,²
použije se pro spuštění testů jednoduchý virtualizovaný operační
systém specifický pro předmět PB152. Tento systém používá mimo jiné
deterministický plánovač, proto byste měli při každém spuštění
dostat stejný výsledek (vyjma případů, kdy Váš program obsahuje
nedefinované chování). Zároveň dostanete výpis systémových volání (a
v pozdějších kapitolách informaci o přepínání procesů, atp.). Stejný
systém se navíc používá i při vyhodnocení odevzdaných úloh.

Chcete-li program ladit:

 • pro použití nástroje ‹valgrind› přeložte program běžným způsobem
   (ručně příkazem ‹cc›, «bez» použití virtualizace ‹pb152.cpp›),
 • pro ‹gdb› si můžete zvolit, která možnost Vám vyhovuje, nicméně
   v obou případech doporučujeme před startem programu použít příkaz
   ‹handle SIGALRM ignore› (zamezí násilnému ukončení laděného
   programu po uplynutí časového limitu).³

² Je možné tento systém přeložit i mimo stroj ‹aisa› – postup
  najdete v přiloženém souboru ‹makefile›. Další pomoc s překladem
  resp. provozem ale nejsme schopni poskytnout – neumíte-li
  ‹pb152.cpp› přeložit a použít, pracujte na stroji ‹aisa›.
³ Příkaz můžete přidat také do souboru ‹~/.gdbinit›, nebudete jej
  pak muset pokaždé zadávat ručně.
