C2110 Operační systém UNIX a základy programování 8. lekce / modul 2 -1C2110 Operační systém UNIX a základy programování Petr Kulhánek kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Přírodovědecká fakulta Masarykova univerzita, Kamenice 5, CZ-62500 Brno PS/2021 Prezenční forma výuky: Rev3 8. lekce / modul 2 C2110 Operační systém UNIX a základy programování 8. lekce / modul 2 -2Hledání chyb ➢ Syntaktické chyby ➢ Logické chyby C2110 Operační systém UNIX a základy programování 8. lekce / modul 2 -3Syntaktické chyby Syntaktické chyby • chyby v zápise neodpovídající specifikaci jazyka • program není přeložitelný, místo chyby vypíše kompiler (např. C/C++, Fortran) • skript není možné vůbec spustit (např. javascript) • interpreter až při běhu skriptu narazí na nesrozumitelný zápis, běh skriptu je ukončen a řádek s chybou je vypsán do chybového výstupu, chyba se může projevit až za specifických podmínek běhu (např. bash, awk, gnuplot) Pozor! Začátek chyby může být na jiném místě než indikuje chybové hlášení. Hledání chyb: • zvýrazňování syntaxe • statické analyzátory kódu C2110 Operační systém UNIX a základy programování 8. lekce / modul 2 -4bash - kontrola syntaxe 1. Základní kontrolu syntaxe je možné provézt vizuálně v textovém editoru, který umožňuje zvýraznit syntaxi programovacího jazyka. 2. Chybové hlášení: $ bash test.sh Zadejte pocet: 5 test.sh: line 10: unexpected EOF while looking for matching `"' test.sh: line 16: syntax error: unexpected end of file neukončený řetězec (vše červeně) zapněte si zobrazování čísla řádků C2110 Operační systém UNIX a základy programování 8. lekce / modul 2 -5bash - statická analýza 3. Statický analyzátor kódu: • online • příkazová řádka https://www.shellcheck.net/ C2110 Operační systém UNIX a základy programování 8. lekce / modul 2 -6Logické chyby Logické chyby • program/skript je možné spustit, ale výsledek neodpovídá očekávání a nebo není reprodukovatelný • tyto chyby se VELMI špatně hledají/opravují - je vhodné se jim vyvarovat důkladným návrhem algoritmu Příčiny logických chyb: • špatný návrh algoritmu (všechny jazyky) • práce s neinicializovanými proměnnými (všechny jazyky) • práce s nealokovanou/uvolněnou pamětí, zápis do nepřidělené paměti (C/C++, Fortran) • souběh (race condition) u paralelních úloh (OpenMP, MPI, threads) Hledání chyb: • dynamické analyzátory běhu (C/C++, Fortran: valgrind) • ladění běhu programu pomocí debuggeru C2110 Operační systém UNIX a základy programování 8. lekce / modul 2 -7debugger - bashdb + visual code 1. Spuštění editoru: $ module add vscode $ code 2. Instalace rozšíření (pouze jednou): https://marketplace.visualstudio.com/items?itemName=rogalmic.bash-debug 3. Konfigurace běhového prostředí (launch.json, pouze jednou): { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "bashdb", "request": "launch", "name": "Bash-Debug", "cwd": "${workspaceFolder}", "program": "${file}", "args": [], "terminalKind": "integrated" }, ] } Praktická ukázka konfigurace a použití. C2110 Operační systém UNIX a základy programování 8. lekce / modul 2 -8debugger - bashdb + visual code Hodnoty proměnných (operátor: $) Debugger Krokování zarážky (breakpoints) Aktuální pozice Terminál: vstup/výstup C2110 Operační systém UNIX a základy programování 8. lekce / modul 2 -9Cvičení I 1. Krokujte běh skriptů z L08.M01.C01.U03. C2110 Operační systém UNIX a základy programování 8. lekce / modul 2 -10- Instalace Instalace shellcheck a bashdb do OS Ubuntu C2110 Operační systém UNIX a základy programování 8. lekce / modul 2 -11Poznámky k instalaci 1. shellcheck je součástí standardních balíčků: 2. bashdb je možné instalovat ze zdrojových kódu (viz L13.M02) nebo do Ubuntu 18.04 LTS z NCBR repositáře balíčků, jméno balíčku: ncbr-bashdb 3. Visual Studio Code je možné instalovat z balíčku (.deb) nebo spouštět z binárního archívu (.tar.gz). Návody viz dokumentace. https://code.visualstudio.com/ $ sudo apt-get install shellcheck https://wolf.ncbr.muni.cz/whitezone/packages/public/18.04/ Pro uživatele Infinity (C2115): bashdb a rozšíření bashdebug vyžaduje systémový příkaz pkill, který je v prostředí Infinity předefinován. Kolizi vyřešíte pomocí příkazu unset zadaného před spuštěním editoru. $ unset pkill