====== 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).