Skip to content

Commit 49c6b8d

Browse files
author
ondrejbenes
committed
Merge branch 'master' of github.com:prusinsky/naucse.python.cz
2 parents 1c12f18 + 7bdf107 commit 49c6b8d

File tree

9 files changed

+151
-6
lines changed

9 files changed

+151
-6
lines changed

lessons/beginners/debug/index.md

+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# Debugování
2+
3+
Při vývoji software se často dostaneme do situace,
4+
kdy si chceme projít kód krok za krokem a zjistit
5+
například to, jaké jsou aktuální hodnoty proměnných,
6+
jestli se správně vyhodnocují podmínky atd.
7+
Tomuto procesu se česky říká *ladění*, často se ale
8+
setkáte s anglickým výrazem *debugging*. Obvykle
9+
ho provádíme ve chvíli, kdy se program nechová
10+
podle očekávání, tedy jsme narazili na chybu (bug).
11+
12+
Možná jste byly zvyklé si na různá místa v programu
13+
pomocí funkce `print` vypisovat aktuální stav programu.
14+
Zjistíte, že u většího projektu je tento přístup většinou
15+
nedostatečný a že si chcete program projít krok za krokem.
16+
17+
Abychom mohli debugovat, potřebujeme k tomu nástroj zvaný
18+
*debugger*. VSCode spolu s [rozšířením pro Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python) ho má zabudovaný.
19+
Ve zbytku této lekce si ukážeme, jak ho používat.
20+
21+
## Ovládání debuggeru
22+
Do debuggeru se přepneme kliknutím na tlačítko s přeškrtnutým broukem,
23+
které vidíte na obrázku níže.
24+
25+
{{ figure(
26+
img=static('debug.png'),
27+
alt="(Menu debuggeru)",
28+
) }}
29+
30+
Zajímají nás především:
31+
- tlačítko pro spuštění debugování (zelený trojúhelník)
32+
- panel s výpisem aktuálních hodnot proměnných - *Variables*
33+
- panel pro ovládání debuggeru
34+
35+
**Panel pro ovládání debuggeru** se zobrazí až po spuštění debuggeru.
36+
Po spuštění je možné debugger restartovat (spustit od začátku)
37+
kliknutím na zelenou šipku ve tvaru kruhu
38+
nebo ho zastavit kliknutím na červený čtvereček.
39+
40+
Program se chová stejně, jako by debugger nebyl zaplý.
41+
Např., pokud se podmínka vyhodnotí jako `False`, tak do jejího těla debugger nevstoupí.
42+
Stejně tak debugger bude procházet cyklem tolikrát, jako za normálního
43+
běhu programu.
44+
45+
### Breakpoint
46+
Klíčovou roli při debugování hraje zarážka - angl. *breakpoint*.
47+
Když debuger narazí na zarážku, tak zastaví vykonávání programu
48+
a předá kontrolu uživateli. Ten poté může zjistit hodnoty proměnných,
49+
pokračovat na další krok nebo třeba vejít do funkce, která se na řádku volá.
50+
Breakpoint umístíme kliknutím vlevo od řádku, kde chceme, aby se debugger zastavil:
51+
52+
{{ figure(
53+
img=static('breakpoint.png'),
54+
alt="(Umístění breakpointu)",
55+
) }}
56+
57+
Pokud klikneme na tlačítko *Continue* (modrý trojúhelník nebo <kbd>F5</kbd>),
58+
tak bude debugger pokračovat až do dalšího breakpointu,
59+
případně na konec programu.
60+
61+
### Step over, into, out
62+
Často budeme chtít pokračovat na další řádek kódu. Docílíme toho pomocí
63+
klávesy <kbd>F10</kbd>, případně kliknutím na *Step over*.
64+
65+
Pokud bychom chtěli vstoupit do funkce, která je volaná na aktualním řádku,
66+
tak toho docílíme pomocí <kbd>F11</kbd> - *Step into*.
67+
68+
Pro vystoupení z aktuální funkce se používá
69+
<kbd>Shift</kbd> + <kbd>F11</kbd>.
70+
Program pokračuje až do chvíle, než se vrátí do funkce, která volala
71+
funkci, ze které jsme chtěli vystoupit.
72+
73+
## Debug testů
74+
Často zjistíme, že nám neprocházejí testy.
75+
Může se jednat o chybu v testu, nebo o chybu v programu.
76+
Ideální je si test prodebugovat, a to například tak,
77+
že dáme breakpoint na začátek testu a pak se kombinací
78+
*Step over / into / out* dostaneme na problémové místo programu.
79+
Budeme sledovat, jak se vyhodnocují jednotlivé podmínky,
80+
jaké argumenty se předávají do funkcí atd.
81+
Často se nám tímto způsobem podaří chybu najít.
82+
83+
Pokud máme správně nastavený VSCode, tak by se nad testovacími
84+
funkcemi měly objevit možnosti *Run Test* a *Debug Test*
85+
(jako na obrázku níže).
86+
87+
{{ figure(
88+
img=static('test_debug.png'),
89+
alt="(Debug testu)",
90+
) }}
91+
92+
Jestli ve svém editoru tyto možnosti nemáš, tak zkus:
93+
- zkontrolovat, že máš nastavený interpreter
94+
- v levém dolním rohu VSCode by jsi kromě verze Pythonu
95+
měla vidět jméno virtuálního prostředí (např. Python 3.6 (venv))
96+
- pokud jméno virtuálního prostředí nevidíš, tak stiskni
97+
<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd>,
98+
vyber *Select Python Interpreter* a zvol své virtuální prostředí
99+
(pravděpodobně *venv*)
100+
- Stisknout <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> a vybrat *Discover Unit Tests*
101+
102+
Po kliknutí na *Debug test* se spustí debugger.
103+
104+
## Debug console
105+
Po spuštění debugeru je možné používat debugovací konzoli.
106+
Najdete ji ve spodním panelu v záložce vedle integrovaného terminálu.
107+
108+
{{ figure(
109+
img=static('debug_console.png'),
110+
alt="(Debug konzole)",
111+
) }}
112+
113+
Představ si, že jsi spustila Python z příkazové řádky
114+
a poté zadala stejný kód, kterým debugger prošel, než se dostal na breakpoint.
115+
V tu chvíli tedy máte k dispozici všechny inicializované globální proměnné,
116+
můžete volat funkce nebo pracovat s proměnným úplně stejně,
117+
jak jsme to dělali v lekcích na začátku kurzu.
118+
119+
Pokud například víte, že na dalším řádku vzniká `IndexError`, ale nevíte proč,
120+
tak můžete zjistit, na jaký index se přistupuje, jaké hodnoty jsou v
121+
seznamu nebo slovníku obsažené a co by se stalo, kdybyste použily jiný index.
122+
123+
Do debug konzole se také vypisují `printy`, pokud je v programu používáte.
124+
125+
Jen pozor - pokud upravíte hodnoty proměnných,
126+
tak se změny promítnout do zbytku programu, takže je někdy nutné
127+
debugger restartovat.

lessons/beginners/debug/info.yml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
title: Debugování
2+
style: md
3+
attribution: Pro PyLadies Brno napsal Ondřej Beneš, 2019.
4+
license: cc-by-sa-40
18.3 KB
Loading
18 KB
Loading
11.3 KB
Loading
13.9 KB
Loading

lessons/beginners/inheritance/index.md

+15-1
Original file line numberDiff line numberDiff line change
@@ -273,4 +273,18 @@ z ní dědit má.
273273
A to je zatím o třídách vše. Už toho víš dost na to,
274274
aby sis napsal{{a}} vlastní zoo :)
275275
276-
Nebo [hru](../../projects/asteroids/)?
276+
277+
## Domácí úkol
278+
279+
Napiš si doma vlastní třídu, aby si pořádně pochopila koncepty z dnešní hodiny.
280+
Už jsme si říkali, že v OOP jsou třídy reprezentací reálného světa.
281+
Psali jsme si třídu pro koťátka, šťenátka, háďátka, bavili jsme se o třídách pro auto nebo kávovar.
282+
283+
284+
Napiš si třídy pro cokoliv chceš tak, aby splňovaly zadání:
285+
286+
- Jedna rodičovská třída, kde bude alespoň jeden atribut a jedna metoda
287+
- Dvě (nebo více) odvozených tříd
288+
- Jedna odvozená třída bude kompletně přepisovat metodu nadřazené třídy
289+
- Druhá odvozená třída bude rozšiřovat metodu nadřazené třídy pomocí super()
290+
- Obě odvozené třídy budou mít stejnou metodu, která bude dělat stejnou věc jiným způsobem (koťátko mňouká, štěňátko štěká)

lessons/git/basics/index.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ se teď seznámíme.
3434
> Budeme hodně pracovat s příkazovou řádkou.
3535
> Jestli se s ní ještě nekamarádíš, koukni se na
3636
> [úvod]({{ lesson_url('beginners/cmdline') }}).
37-
>
37+
>
3838
> Nezapomeň: `$` na začátku se nepíše;
3939
> je tu proto, aby šlo poznat, že jde o příkaz.
4040
@@ -346,7 +346,7 @@ Můj popisek bude znít takhle:
346346
Rozdělení dlouhých řádků
347347
348348
Verše básně se většinou píšou na jednotlivé řádky. Myslím, že
349-
takhle se to líp čte. (Ale co si budeme povídat, hlavní
349+
takhle se to líp čte. (Ale co si budeme povídat, hlavní
350350
důvod je ukázat, co dělá git diff.)
351351
```
352352

@@ -367,7 +367,7 @@ Author: Adéla Novotná <[email protected]>
367367
Date: Mon Mar 20 14:51:34 2017 +0100
368368
369369
Rozdělení dlouhých řádků
370-
370+
371371
Verše básně se většinou píšou na jednotlivé řádky. Myslím, že
372372
takhle se to líp čte. (Ale co si budeme povídat, hlavní
373373
důvod je ukázat, co dělá git diff.)
@@ -414,7 +414,7 @@ Author: Adéla Novotná <[email protected]>
414414
Date: Mon Mar 20 14:51:34 2017 +0100
415415
416416
Rozdělení dlouhých řádků
417-
417+
418418
Verše básně se většinou píšou na jednotlivé řádky. Myslím, že
419419
takhle se to líp čte. (Ale co si budeme povídat, hlavní
420420
důvod je ukázat, co dělá git diff.)

runs/2019/brno-jaro-2019-ut/info.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ plan:
104104
- lesson: beginners/circular-imports
105105
- lesson: beginners/exceptions
106106
- lesson: beginners/testing
107+
- lesson: beginners/debug
107108
- title: Domácí projekty (PDF)
108109
url: https://pyladies.cz/v1/s005-modules/handout/handout5.pdf
109110
type: homework
@@ -150,4 +151,3 @@ plan:
150151
- title: Závěrečné projekty - prezentace
151152
slug: asteroids-2
152153
date: 2019-06-18
153-

0 commit comments

Comments
 (0)