====== Překlad a Debug ====== ===== Překlad programu ===== Jakýkoliv program potřebuje ke své práci zdrojové kódy, které pro jazyk C jsou s příponout .c. Jelikož programovací jazyk C je kompilovaný programovací jazyk, je třeba po každé změně zdrojového kódu program přeložit. Pro zautomatizování této činnosti je potřeba provést několik kroků, které vytvoří soubor ''tasks.json'' - Otevřít zdrojový kód programu - Zvolit ''Terminal'' - ''Configure Default Build Task...'' - Vybrat volbu s překladačem, v našem případě ''gcc'' Následně se vytvoří základní předpis, který bude vypadat přibližně takto. Pro systém Linux nebo macOS nebude přípona exe a překladač se bude nacházet v jiném adresáři. Pro překlad poté můžete využít i klávesové zkratky ''Ctrl'' + ''Shift'' + ''B''. { "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: gcc.exe build active file", "command": "C:\\MinGW\\bin\\gcc.exe", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "compiler: C:\\MinGW\\bin\\gcc.exe" } ] } Jelikož toto je generický předpis, doporučujeme upravit v předpisu ''args'' aby bylo zaručeno to, že nemusíte být v aktivním souboru main.c, ale kdekoliv. * Třetí řádek ''${file}'' na ''${workspaceFolder}\\main.c'' * Poslední řádek z ''${fileDirname}\\${fileBasenameNoExtension}.exe'' na ''${workspaceFolder}\\main.exe'' ===== Vytvoření předpisu pro Debug ===== Jakýkoliv program než se může distribuovat dál je potřeba otestovat. Možností je samozřejmě několik, ale nejjednodušší a základní je lazení programu přímo, kde jsou vidět i hodnoty proměnných. Stejně jako u překladu je potřeba vytvořit předpis. Jeho vytvoření se skládá z několika kroků: - Zvolit v ''Run'' - ''Add Configuration...'' - V otevřeném souboru ''launch.json'' klikneme na ''Add Configuration...'' - Zvolíme ''{}C/C++ (gdb) Launch'' - Ve vytvořené konfiguraci změníme tyto položky: - **program**: ''"${workspaceFolder}\\main.exe"'' - **externalConsole**: ''true'' - **miDebuggerPath**: ''"C:\\MinGW\\bin\\gdb.exe"'' - Přidáme položku ''"preLaunchTask"'' s parametrem podle vytvořeného tasku u parametru **label**, výše je ''"C/C++: gcc.exe build active file"'' Upravený soubor ''launch.json'' poté může vypadat takto: { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}\\main.exe", "args": [], "stopAtEntry": true, "cwd": "${fileDirname}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "Set Disassembly Flavor to Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], "preLaunchTask": "C/C++: gcc.exe build active file" } ] } ===== Debug Programu ===== Po vytvoření předpisu pro debug programu můžeme přistoupit k samotnému lazení programu. Ideální je si otevřít zdrojový kód, v našem případě ''main.c'', přidat si breakpoint (červené kolečko vedle čísla řádku) na první řádek ve funkci ''main'' a stisknout klávesu ''F5'' nebo přes ''Run'' - ''Start Debugging''. Nahoře na obrazovce se objeví menu pro debug: * Continue (''F5'') - Pokračování do dalšího breakpointu * Step Over (''F10'') - Skočí na další řádek * Step Into (''F11'') - Skočí do funkce (pokud se na daném řádku nachází) * Step Out (''Shift'' + ''F11'') - Vyskočí z funkce zpět * Restart (''Ctrl'' + ''Shift'' + ''F5'') - Restartuje program * Stop (''Shift'' + ''F5'') - Ukončení debugu {{:courses:b0b99prpa:tutorials:vsc:debug.png|}} Pokud se dojde na řádek, kde se nachází blokující funkce, např. ''scanf'', je potřeba zadat vstup v externím okně, které při začátku debugu vyskočilo, stejně jako kdybychom program ovládali z konzole ve VS Code. V levém okně potom je možnost nastavit sledovat proměnné nebo si některé nastavit (watch).