Obsah
1. PuDB: výkonný debugger pro Python s retro uživatelským rozhraním
2. Ideový předchůdce PuDB – Turbo Debugger pro DOS a Microsoft Windows
3. PuDB vs. debuggery pro nativní aplikace
5. První spuštění debuggeru a konfigurační dialog
7. Regiony, na které je okno debuggeru rozděleno
8. Spouštění a krokování aplikací
10. Nastavení vlastností breakpointů
11. Prohlížení obsahu zásobníkových rámců
12. Přeskok mezi zásobníkovými rámci (vyvolání historie)
13. Prohlížení obsahu proměnných
14. Složitější datové struktury
15. Použití vestavěného příkazového řádku při ladění aplikací
1. PuDB: výkonný debugger pro Python s retro uživatelským rozhraním
V článcích Grafická nadstavba nad GNU Debuggerem gdbgui a její alternativy a Trasování a ladění nativních aplikací v Linuxu: použití GDB a jeho nadstaveb jsme se seznámili jak s GNU debuggerem (známým i pod zkratkou GDB nebo gdb), tak i s dalšími debuggery dostupnými v Linuxu. Kromě toho jsme si ukázali i některé nadstavby vytvořené nad GNU debuggerem. Dále jsme si v dalším článku, tentokrát s titulkem Užitečné skripty a pluginy pro textový editor Vim: propojení Vimu s debuggery ukázali, jak je možné nakonfigurovat známý a oblíbený textový editor Vim takovým způsobem, aby ho bylo možné použít jako frontend (tedy ve funkci uživatelského rozhraní) pro různé typy debuggerů určených jak pro ladění aplikací naprogramovaných v céčku popř. C++ či aplikací vytvořených v Pythonu.
Obrázek 1: Typické „sezení“ programátora využívajícího debugger gdb. Nastavení breakpointu příkazem b main, spuštění laděného programu příkazem r a krokování příkazem n (klávesa Enter zopakuje poslední zadaný příkaz, proto je n vlastně v tomto příkladu používán nadbytečně).
Pro aplikace naprogramované v Pythonu však existuje ještě jeden zajímavý a poměrně snadno ovladatelný debugger, který pro komunikaci s programátory používá plnohodnotné (celoobrazovkové) textové uživatelské rozhraní (TUI – Text-Based User Interface). Tento debugger se jmenuje PuDB a jeho uživatelské rozhraní je do značné míry inspirováno slavným Turbo Debuggerem, který si možná někteří čtenáři pamatují ze stařičkého DOSu i z Microsoft Windows (Turbo Debugger ovšem pochopitelně nebyl určen pro Python, ale pro aplikace naprogramované v Turbo/Borland Pascalu, Turbo C a později i Turbo C++). Dnes se seznámíme s možnostmi, které nám PuDB nabízí a pokusíme se tyto možnosti porovnat s dalšími debuggery dostupnými pro Python.
Obrázek 2: Aplikace gdbtui nabízí „alternativní“ celoobrazovkové ovládání debuggeru.
2. Ideový předchůdce PuDB – Turbo Debugger pro DOS a Microsoft Windows
Historie vývoje a používání debuggerů je velmi dlouhá, protože se – vedle assemblerů, makroassemblerů a překladačů – jedná o nejstarší programátorské nástroje vůbec. Sálové počítače (mainframy) a později i minipočítače většinou obsahovaly speciální hardwarovou konzoli určenou pro ladění programů (představme si ovládací panel s tlačítky typu Run, Step atd.). Debuggery implementované jako běžné programy se pak nejvíce rozšířily na mikropočítačích. Mezi první debugger v moderním slova smyslu, tedy program nabízející celoobrazovkové uživatelské rozhraní a možnost interaktivní práce s ním, patří zejména IBM OLIVER (CICS interactive test/debug), jehož první verze vyšla již v roce 1972. K rychlému vývoji debuggerů pak došlo v osmdesátých a devadesátých letech, kdy se tyto nástroje staly nedílnou součástí integrovaných vývojových prostředí. Právě toto období nás bude zajímat nejvíc, protože v něm vznikl i Turbo Debugger.
Obrázek 3: V minulosti velmi populární nástroj Turbo Debugger je vybaven celoobrazovkovým textovým uživatelským rozhraním (TUI) připomínajícím další produkty vytvořené společností Borland. Rozhraní a možnosti Turbo Debuggeru je stále možné považovat za etalon toho, jak by mohl vypadat moderní debugger s TUI či GUI.
V našich zemích byla populární především integrovaná vývojová prostředí prodávaná společností Borland (Turbo Pascal, Turbo C++, Turbo Pascal, Borland Pascal, částečně i Turbo Basic atd.), do kterých byl debugger postupně integrován. Navíc tato společnost vytvořila i již několikrát zmíněný Turbo Debugger, který měl podobný vzhled i ovládání jako další produkty Borlandu. První komerčně dostupná verze Turbo Debuggeru začala být nabízena již v roce 1989, a to buď jako samostatný produkt, nebo ho bylo možné koupit společně s Turbo Assemblerem (ten byl ovládaný z příkazového řádku) a později i s Turbo C. Později byly možnosti Turbo Debuggeru rozšířeny, aby plně podporovaly další produkty firmy Borland, především již zmíněné Turbo C++ a Turbo Pascal i Borland Pascal. S příchodem 16bitových procesorů Intel 286 a později i 32bitových procesorů i386 existoval Turbo Debugger ve třech variantách: 16bitová varianta pro reálný režim TD.EXE, 16bitová varianta pro chráněný režim TD286.EXE a konečně TD386.EXE, který mj. podporoval i HW breakpointy podporované tehdy novými procesory i386.
Obrázek 4: Jedno ze speciálních oken Turbo Debuggeru, v němž se zobrazuje stav mikroprocesoru (obsahy pracovních registrů i příznakových bitů), obsah vybrané části operační paměti a taktéž zdrojový kód proložený disassemblovaným strojovým kódem (v této části okna je zvýrazněn právě prováděný řádek).
Při porovnání screenshotů na obrázcích 3 a 4 se screenshoty zobrazenými v navazujících kapitolách zjistíme, že se dnes popisovaný debugger PuDB skutečně Turbo Debuggeru podobá, což je ostatně jen dobře, protože TUI používaná firmou Borland jsou přehledná a snadno ovladatelná.
3. PuDB vs. debuggery pro nativní aplikace
Při dále uvedeném popisu možností debuggeru PuDB a při jeho srovnání například s GNU Debuggerem atd. by se mohlo zdát, že se vlastně jedná o poměrně jednoduchý nástroj, který uživatelům nenabízí příliš mnoho funkcí a technologií. Ve skutečnosti ovšem debugger určený to ladění aplikací ve vysokoúrovňovém Pythonu nemusí obsahovat tolik funkcí, jako debuggery pro nativní aplikace – například je možné zcela vynechat prohlížení obsahu registrů mikroprocesoru, oblastí operační paměti, disassemblovaného kódu (i když by bylo pěkné vidět bajtkód nebo dokonce AST) či obsahu řídicích registrů různých zařízení. Pro běžné ladění si vystačíme s oknem se zobrazeným zdrojovým kódem, obsahem proměnných, obsahem zásobníkových rámců, seznamem breakpointů a ideálně taktéž se seznamem běžících nebo pozastavených vláken. Kromě poslední možnosti jsou všechny ostatní funkce v PuDB dostupné. Navíc je k dispozici i příkazový řádek, díky němuž lze laděný program zkoumat i do větších podrobností.
Obrázek 5: Debuggery pro nativní aplikace musí umět zobrazit obsah registrů procesoru, vybraného regionu operační paměti popř. i disassemblovaný strojový kód.
4. Instalace PuDB
Instalace debuggeru PuDB je snadná, protože balíček s tímto nástrojem je dostupný na PyPi. Pro jeho instalaci tedy postačuje využít instalátor pip popř. pip3 a provést buď instalaci pro všechny uživatele:
$ pip3 install pudb
nebo instalaci pro právě aktivního uživatele:
$ pip3 install --user pudb
Debugger PuDB vyžaduje kupodivu instalaci pouze dvou závislostí, především knihovny urwid sloužící pro tvorbu aplikací s celoobrazovkovým textovým uživatelským rozhraním a taktéž knihovny nazvané Pygments, která je používána pro zobrazování syntaxe zdrojových kódů či konfiguračních souborů. Celá instalace by měla proběhnout prakticky okamžitě:
Downloading/unpacking pudb Downloading pudb-2018.1.tar.gz (56kB): 56kB downloaded Running setup.py (path:/tmp/pip_build_tester/pudb/setup.py) egg_info for package pudb /usr/lib/python3.4/distutils/dist.py:260: UserWarning: Unknown distribution option: 'test_requires' warnings.warn(msg) Requirement already satisfied (use --upgrade to upgrade): urwid>=1.1.1 in ./.local/lib/python3.4/site-packages (from pudb) Requirement already satisfied (use --upgrade to upgrade): pygments>=1.0 in ./.local/lib/python3.4/site-packages (from pudb) Installing collected packages: pudb Running setup.py install for pudb /usr/lib/python3.4/distutils/dist.py:260: UserWarning: Unknown distribution option: 'test_requires' warnings.warn(msg) Installing pudb3 script to /home/tester/.local/bin Successfully installed pudb Cleaning up...
V případě lokální instalace bude spustitelný skript pudb nebo pudb3 dostupný v adresáři:
~/.local/bin
5. První spuštění debuggeru a konfigurační dialog
PuDB při svém spuštění vyžaduje zadání skriptu (modulu), který se má ladit. To je zajímavé, protože většinu ostatních debuggerů s GUI či TUI je možné nejprve spustit a teprve poté zadat soubor, s nímž se má pracovat:
$ pudb3 Usage: pudb3 [options] SCRIPT-TO-RUN [SCRIPT-ARGUMENTS] Options: -h, --help show this help message and exit -s, --steal-output --pre-run=COMMAND Run command before each program run
Správné spuštění má tedy vypadat následovně:
$ pudb3 jméno_laděného_modulu.py
Obrázek 6: Spuštění debuggeru PuDB z příkazové řádky se zadáním jména laděného modulu.
Po prvním spuštění debuggeru, tj. ve chvíli, kdy ještě neexistuje soubor ~/.config/pudb/pudb.cfg, se zobrazí okno se zprávou o základních možnostech tohoto nástroje, autorech, licenci atd.:
Obrázek 7: Zpráva zobrazená při prvním spuštění debuggeru.
Ihned poté se zobrazí další dialog, který je již z praktického hlediska důležitější. Tento dialog totiž obsahuje veškerou konfiguraci PuDB a samozřejmě se k němu můžete kdykoli vrátit zadáním klávesové zkratky Ctrl+P. Ovlivnit je možné jak vzhled aplikace (barevné schéma, tak i její chování při zobrazování obsahu proměnných, zásobníkových rámců apod.):
Obrázek 8: Dialog s konfiguračními volbami.
Pro opuštění konfiguračního dialogu je nutné stlačit šipku doprava (ne TAB) a vybrat si mezi uložením konfigurace a uzavřením dialogu. Ihned poté se dialog zavře a PuDB se nachází v základním ladicím režimu:
Obrázek 9: Pohled na textové uživatelské rozhraní debuggeru s pěti regiony.
6. Vestavěná nápověda
Tato kapitola bude velmi stručná. Nápověda se zobrazí klávesovou zkratkou F1 nebo ? a ukončuje se klávesou Enter (nikoli Esc). Samotná nápověda je v současné verzi PuDB poměrně stručná, obsahuje však jak základní koncepty, tak i všechny důležité klávesové zkratky.
Obrázek 10: Dialog s nápovědou k debuggeru PuDB.
7. Regiony, na které je okno debuggeru rozděleno
Celoobrazovkové textové uživatelské rozhraní aplikace PuDB je rozděleno do pěti oblastí (regionů), mezi nimiž se lze snadno přepínat a jejichž velikost je možné upravovat. Všech pět oblastí je vypsáno v tabulce společně s klávesovými zkratkami, které slouží pro přechod do vybrané oblasti. Navíc je do tabulky přidána i informace o výstupní konzoli, která zabírá celou plochu terminálu a tudíž je nutné se na ní přepnout klávesovou zkratkou:
Jméno | Oblast | Klávesová zkratka |
---|---|---|
code | laděný modul se zobrazením breakpointů | C |
variables | aktuálně viditelné proměnné | V |
stack | zásobníkové rámce laděné aplikace | S |
breakpoints | seznam všech uživatelem nastavených breakpointů | B |
internal shell | interpret Pythonu, v němž lze manipulovat se stavem aplikace | Ctrl+X |
shell | externí interpret Pythonu, v němž lze manipulovat se stavem aplikace | ! |
output screen | standardní terminálový výstup aplikace | o |
Ve skutečnosti je přepínání mezi regiony většinou ještě mnohem jednodušší (s výjimkou interního shellu) – je totiž možné využít běžné kurzorové šipky a přepnout se tak z horního levého regionu na regiony umístěné v pravém sloupci a naopak. I šipky nahoru/dolů slouží pro přepnutí mezi regiony, protože pokud kurzor dojede na začátek/konec seznamu (proměnných, zásobníkových rámců, breakpointu), přepne se do dalšího regionu.
Obrázek 11: Rozdělení okna PuDB na pět oblastí.
Obrázek 12: Spuštění PuDB v terminálu s větším počtem textových řádků i počtu znaků na řádek. V debuggeru je laděna aplikace pro výpočet Ackermannovy funkce.
Velikost jednotlivých regionů se upravuje klávesovými zkratkami:
Klávesa | Význam |
---|---|
+ | horizontální zvětšení o cca 1/15 sloupců |
– | horizontální zmenšení o cca 1/15 sloupců |
= | horizontální zvětšení na maximální povolenou šířku |
_ | horizontální zmenšení na minimální povolenou šířku |
[ | vertikální zvětšení o jeden řádek |
] | vertikální zmenšení o jeden řádek |
8. Spouštění a krokování aplikací
Nejdůležitější funkcí debuggeru je samozřejmě spouštění aplikací s možností jejich pozastavení (na breakpointech) a krokování. K tomu slouží několik klávesových zkratek, které jsou však platné pouze ve chvíli, kdy je aktivní levá horní oblast (code area):
Klávesa | Význam | Popis |
---|---|---|
r | run | spuštění aplikace (přechod na vstupní bod skriptu) |
q | quit | ukončení aplikace a zobrazení dialogu, jaká akce se má provést (restart etc.) |
n | next | krokování: přechod na další příkaz; volání funkce je chápáno jako jediný krok |
s | step into | krokování: přechod na další příkaz; při volání funkce se přejde do volané funkce |
c | continue | konec krokování pokračování běhu aplikace (až do jejího konce nebo do přístupu na breakpoint) |
f | finish | dokončení funkce, v němž se program nachází (počká se na posledním return) |
Obrázek 13: Krokování aplikace. V tomto barevném schématu je aktuální řádek zobrazen inverzně bíle. Navíc je zapnuto zobrazení čísel řádků, takže vidíme, že se nacházíme ve zdrojovém kódu na řádku číslo 47.
Obrázek 14: Dialog zobrazený po dokončení běhu aplikace, v němž se může vývojář rozhodnout, jestli se má program spustit znovu, zahájit tzv. post mortem zkoumání stavu aplikace či zda se má PuDB ukončit.
9. Použití breakpointů
Jednou z nejdůležitějších vlastností debuggeru je jeho schopnost nastavovat breakpointy na vybraná místa v laděném programovém kódu, a to většinou buď na konkrétní programový řádek, nebo v některých případech dokonce na určitou strojovou instrukci. Tuto druhou možnost sice PuDB nenabízí (ani pro bajtkód), ale breakpointy v něm je samozřejmě možné používat a to dokonce velmi snadno. Pro nastavení breakpointu slouží klávesa b, kterou je možné stisknout ve chvíli, kdy se kurzor nachází v oblasti se zdrojovým kódem (code area).
Obrázek 15: Nastavení breakpointu v laděném zdrojovém kódu.
Informace o nově vytvořeném breakpointu by se měla ihned objevit v seznamu breakpointů (pravá dolní oblast) a současně by se měl příslušný řádek obarvit. V případě výchozího barvového schématu (styl původního Turbo Debuggeru) je tento řádek zobrazen se žlutým písmem a červeným pozadím. Po spuštění aplikace klávesou r nebo při jejím znovuspuštění klávesou c se běh programu na daném breakpointu zastaví a je možné začít krokování, prohlížení obsahu proměnných, zásobníkových rámců apod.
Obrázek 16: Zastavení laděné aplikace na breakpointu (změněné barvové schéma).
V oblasti breakpoints se používají tyto klávesové zkratky:
Klávesa | Význam |
---|---|
e | povolení nebo zákaz breakpointu |
d | vymazání breakpointu |
Enter | nastavení vlastností breakpointu |
Obrázek 17: Zastavení laděné aplikace na breakpointu (další změněné barvové schéma).
10. Nastavení vlastností breakpointů
Ve výchozím nastavení se laděná aplikace zastaví při každém přístupu na breakpoint. Ovšem v některých případech potřebujeme, aby bylo řízení poněkud sofistikovanější. K tomu slouží konfigurace breakpointů, ke které se dostaneme takto – klávesou B (velké B, protože malé slouží k vytvoření breakpointu) se přepneme do oblasti breakpoints se seznamem všech uživatelem nastavených breakpointů. Dále je již možné snadno šipkami vybrat určený breakpoint a po stlačení klávesy Enter zobrazit dialog s podrobnější konfigurací. V tomto dialogu je možné nastavit následující vlastnosti:
- Podmínka, která musí být splněna, aby se aplikace na breakpointu zastavila.
- Počet průchodů breakpointem, které se sice budou počítat, ale aplikace se zastaví až po N průchodech.
- Kombinace obou předchozích možností – použití počitadla až po splnění podmínky.
- Breakpoint je možné zakázat či povolit příslušným checkboxem.
Obrázek 18: Nastavení základních vlastností breakpointu.
Informace o nastavených breakpointech zůstane zachována i pro další spouštění debuggeru. Je totiž automaticky ukládána do souboru ~/.config/pudb/saved-breakpoints-3.6 (nebo pod podobným názvem). Obsah tohoto souboru si můžete jednoduše prohlédnout, protože se jedná o čitelný textový soubor:
b /home/tester/python/vapory-examples/scene3.py:33 b /home/tester/python/vapory-examples/scene3.py:65 b /home/tester/python/vapory-examples/scene5.py:139 b /home/tester/python/vapory-examples/scene3.py:21, n == 5 b /home/tester/src/python/python-type-hints/test.py:18 b /home/tester/src/python/python-type-hints/test.py:20 b /home/tester/temp/factorial2_2.py:2, n==5 b /home/tester/temp/python/jython-examples/benchmark1/mandelbrot.py:35
11. Prohlížení obsahu zásobníkových rámců
Další důležitou vlastností naprosté většiny moderních debuggerů je schopnost prohlížení zásobníkových rámců (stack frames) s tím, že je možné vrátit běh programu do zvoleného místa v minulosti (což ovšem samozřejmě neznamená, že se vrátí i celý stav aplikace). V případě, že je aplikace pozastavena na breakpointu nebo při post-mortem stavu je možné se klávesou S (velké S, protože malé s je krokovací operace) přepnout na výpis obsahu všech zásobníkových rámců od vstupu do aplikace až po místo v právě prováděné funkci.
Obrázek 19: Postupné zanořování do funkce pro výpočet faktoriálu (winding phase).
Obrázek 20: Procházení zásobníkovými rámci při ladění Ackermannovy funkce.
12. Přeskok mezi zásobníkovými rámci (vyvolání historie)
Mezi jednotlivými zásobníkovými rámci se pohybujeme s využitím kurzorových šipek a po výběru rámce stačí stisknout klávesu Enter. Program se ihned přepne na daný rámec, což je patrné i v oblasti se zobrazením zdrojového kódu – viz též následující dvojice screenshotů:
Obrázek 21: Průchod zásobníkovými rámci jednoduché testované aplikace se třemi funkcemi, které se navzájem volají.
Obrázek 22: Průchod zásobníkovými rámci jednoduché testované aplikace se třemi funkcemi, které se navzájem volají.
13. Prohlížení obsahu proměnných
Nejsložitější je oblast nazvaná Variables, která nabízí prohlížení obsahu vybraných proměnných popř. návratových hodnot prakticky libovolných výrazů. V této oblasti se automaticky zobrazují hodnoty argumentů funkcí a před návratem z funkce i vypočtená návratová hodnota, ovšem pomocí klávesy n je možné přidat další proměnnou a/nebo výraz, který sleduje hodnoty dalších proměnných. V případě, že je proměnná či výraz vybraná, zobrazí se po stisku klávesy Enter dialog, v němž je možné zvolit, jakým způsobem se obsah proměnné zobrazí. Využívá se zde možností introspekce Pythonu:
Obrázek 23: Nastavení zobrazení vybrané proměnné.
V oblasti Variables se používají tyto klávesové zkratky:
Klávesa | Význam |
---|---|
n | přidání nové proměnné nebo výrazu |
\ | expanze obsahu proměnné (viz další kapitolu) |
t | změna způsobu zobrazení: typ proměnné |
r | změna způsobu zobrazení: výsledek repr() |
s | změna způsobu zobrazení: výsledek str() |
c | změna způsobu zobrazení: podle konfigurace PuDB |
h | vybraná proměnná/výraz bude zvýrazněna, což pomáhá k lepší orientaci |
w | zapne nebo vypne zalamování řádků u proměnných s dlouhým obsahem (seznamy, řetězce) |
* | přepínání způsobu zobrazení obsahu tříd (public, private, all) |
m | zapnutí či vypnutí zobrazení metod u objektů |
Obrázek 24: Dialog pro přidání další proměnné či sledovaného výrazu.
14. Složitější datové struktury
V případě složitějších datových struktur, například seznamu seznamů:
y = [1,2,3,[4,5,6]]
je nutné pro zobrazení vnitřních podstruktur používat klávesovou zkratku \. Ta nefunguje rekurzivně (alespoň ne v současné verzi PuDB), takže je většinou nutné vybírat i jednotlivé podstruktury a stlačit \ několikrát. U výše zmíněného seznamu jen dvakrát:
y: list (4) [pub] | 0: 1 | 1: 2 | 2: 3 | 3: list (3) [pub] | | 0: 4 | | 1: 5 | | 2: 6
Ovšem můžeme mít i složitější strukturu:
x = { "left": { "left": 1, "middle": 2, "right": 3}, "middle": { "left": 4, "middle": 5, "right": 6}, "right": { "left": 7, "middle": 8, "right": 9}}
Tu lze zobrazit například následujícím způsobem:
Obrázek 25: Zobrazení rekurzivní datové struktury, v tomto případě slovníku s dalšími slovníky.
15. Použití vestavěného příkazového řádku při ladění aplikací
V některých případech může být velmi užitečný vestavěný příkazový řádek, který programátorům zpřístupňuje vybraný interpret Pythonu. Ve skutečnosti je celé ladění prováděno v rámci vybraného interpretru, takže z příkazového řádku má programátor přímý přístup ke všech modulům, třídám, objektům, funkcím i proměnným, které jsou dostupné nejenom pro čtení, ale i (pro metody/funkce) pro volání a v případě objektů a proměnných i pro zápis. Do příkazového řádku je možné se přepnou klávesovou zkratkou ! (v případě výchozího nastavení) nebo vždy klávesou Ctrl+X.
Obrázek 26: Přístup ke stavu programu i po jeho ukončení (v rámci post-mortem).
Klávesa | Význam |
---|---|
Ctrl+P | hledání v historii již zapsaných příkazů (previous) |
Ctrl+N | hledání v historii již zapsaných příkazů (next) |
Tab | automatické doplňování jmen objektů, metod, funkcí nebo proměnných |
Obrázek 27: V rámci příkazového řádku lze provádět i různé výpočty.
16. Post-mortem operace
Ve chvíli, kdy je laděná aplikace ukončena, ať již běžným způsobem nebo pádem, není informace o průběhu jejího běhu a ladění zcela ztracená, protože je možné provádět takzvané post-mortem zkoumání „mrtvolky“ aplikace. Co se má s právě ukončenou aplikací provádět se PuDB zeptá v následujícím dialogu:
Obrázek 28: Úspěšné ukončení aplikace.
V post-mortem stavu je možné si prohlížet zásobníkové rámce, sledované proměnné apod. V této části ovšem PuDB obsahuje chybu, takže po ukončení aplikace je například nemožné nastavovat vlastnosti sledovaných proměnných (což je logické, protože už nemůže pracovat introspekce, ovšem k pádu debuggeru by dojít nemělo).
Obrázek 29: Post-mortem stav.
17. Pády PuDB
PuDB je sice při běžné práci dostatečně stabilní, ovšem přesto může dojít k situaci, kdy dojde k jeho pádu nebo pouze k nahlášení chyby. Chyba nastane ve chvíli, kdy se pokusíme načíst zdrojový kód, který neodpovídá syntaktickým pravidlům Pythonu (typicky se jedná o chybějící čárku, dvojtečku nebo závorku). K pádu PuDB v mém případě došlo pouze několikrát, a to při manipulaci se seznamem breakpointů (pokus o vymazání breakpointu, o kterém si PuDB myslel, že již neexistuje) a proměnných v post-mortem stavu. V případě, že dojde k pádu, nabídne PuDB možnost ladit sama sebe, což kupodivu poměrně dobře funguje:
Obrázek 30: Při pádu PuDB je možné začít tento debugger ladit.
Obrázek 31: I přes některé problémy je použití PuDB uživatelsky mnohem příjemnější, než použití klasického Pdb.
Obrázek 32: Použití Pdb při ladění funkce pro výpočet faktoriálu.
18. Odkazy na Internetu
- Introduction to the PuDB Python Debugging Tool
http://heather.cs.ucdavis.edu/~matloff/pudb.html - pudb’s documentation
https://documen.tician.de/pudb/ - pudb 2018.1 na PyPi
https://pypi.org/project/pudb/ - PuDB, the IDE debugger without an IDE!
https://www.youtube.com/watch?v=IEXx-AQLOBk - Grafická nadstavba nad GNU Debuggerem gdbgui a její alternativy
https://www.root.cz/clanky/graficka-nadstavba-nad-gnu-debuggerem-gdbgui-a-jeji-alternativy/ - Užitečné skripty a pluginy pro textový editor Vim: propojení Vimu s debuggery
https://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim-propojeni-vimu-s-debuggery/ - gdbgui 0.7.8.3: browser-based gdb frontend using Flask and JavaScript to visually debug C, C++, Go, or Rust
https://pypi.python.org/pypi/gdbgui - Repositář projektu gdbgui
https://github.com/cs01/gdbgui - gdbgui – examples
https://github.com/cs01/gdbgui/tree/master/examples - Debuggery a jejich nadstavby v Linuxu
http://mojefedora.cz/debuggery-a-jejich-nadstavby-v-linuxu/ - Debuggery a jejich nadstavby v Linuxu (2. část)
http://mojefedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-2-cast/ - Debuggery a jejich nadstavby v Linuxu (3): Nemiver
http://mojefedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-3-nemiver/ - Debuggery a jejich nadstavby v Linuxu (4): KDbg
http://mojefedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-4-kdbg/ - Debuggery a jejich nadstavby v Linuxu (5): ladění aplikací v editorech Emacs a Vim
http://mojefedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-5-ladeni-aplikaci-v-editorech-emacs-a-vim/ - GDB – Dokumentace
http://sourceware.org/gdb/current/onlinedocs/gdb/ - GDB – Supported Languages
http://sourceware.org/gdb/current/onlinedocs/gdb/Supported-Languages.html#Supported-Languages - Borland Turbo Debugger
https://en.wikipedia.org/wiki/Borland_Turbo_Debugger - GNU Debugger (Wikipedia)
https://en.wikipedia.org/wiki/GNU_Debugger - The LLDB Debugger
http://lldb.llvm.org/ - Debugger (Wikipedia)
https://en.wikipedia.org/wiki/Debugger - 13 Linux Debuggers for C++ Reviewed
http://www.drdobbs.com/testing/13-linux-debuggers-for-c-reviewed/240156817 - Reverse Engineering Tools in Linux – strings, nm, ltrace, strace, LD_PRELOAD
http://www.thegeekstuff.com/2012/03/reverse-engineering-tools/ - An Introduction To Using GDB Under Emacs
http://tedlab.mit.edu/~dr/gdbintro.html - GNU Emacs
https://www.gnu.org/software/emacs/emacs.html - The Emacs Editor
https://www.gnu.org/software/emacs/manual/html_node/emacs/index.html - Emacs Lisp
https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html - An Introduction to Programming in Emacs Lisp
https://www.gnu.org/software/emacs/manual/html_node/eintr/index.html - 27.6 Running Debuggers Under Emacs
https://www.gnu.org/software/emacs/manual/html_node/emacs/Debuggers.html - GdbMode
http://www.emacswiki.org/emacs/GdbMode - Emacs (Wikipedia)
https://en.wikipedia.org/wiki/Emacs - Emacs Lisp (Wikipedia)
https://en.wikipedia.org/wiki/Emacs_Lisp - Pyclewn installation notes
http://pyclewn.sourceforge.net/install.html - pip Installation
https://pip.pypa.io/en/latest/installing.html - Clewn
http://clewn.sourceforge.net/ - Clewn installation
http://clewn.sourceforge.net/install.html - Clewn – soubory
http://sourceforge.net/projects/clewn/files/OldFiles/ - KDbg: úvodní stránka
http://www.kdbg.org/ - Nemiver (stránky projektu)
https://wiki.gnome.org/Apps/Nemiver - Basic Assembler Debugging with GDB
http://dbp-consulting.com/tutorials/debugging/basicAsmDebuggingGDB.html - Nemiver FAQ
https://wiki.gnome.org/Apps/Nemiver/FAQ - Nemiver (Wikipedia)
https://en.wikipedia.org/wiki/Nemiver - Data Display Debugger
https://www.gnu.org/software/ddd/ - GDB – Dokumentace
http://sourceware.org/gdb/current/onlinedocs/gdb/ - BASH Debugger
http://bashdb.sourceforge.net/ - The Perl Debugger(s)
http://debugger.perl.org/ - Visual Debugging with DDD
http://www.drdobbs.com/tools/visual-debugging-with-ddd/184404519 - Pydb – Extended Python Debugger
http://bashdb.sourceforge.net/pydb/ - Debugging
http://janus.uclan.ac.uk/pagray/labs/debug.htm - Insight
http://www.sourceware.org/insight/