Debugger GDB
Máme napsanou a zkompilovanou aplikaci, pustíme ji, ale ona nefunguje, jak jsme si představovali, nebo dokonce padá. Tehdy je nejvyšší čas povolat ke slovu dalšího nepostradelného pomocníka programátora - debugger - nástroj pro ladění chyb. Jako programátoři aplikací pro operační systém Linux použijeme známý a léty ověřený GNU debugger zkráceně též gdb. V následujícíh řádcích se seznámíme s jeho možnostmi a ovládáním. Dozvíme se i něco málo o trasovacích nástrojích a zjistíme, že i když je debugger gdb nástrojem pro příkazovou řádku, tak přesto existují programy, které slouží jako jeho zdařilé grafické nadstavby.
Úvodem si zkusme nastínit situace, v kterých nám bude debugger gdb nápomocen. Ladění běžící aplikace je totiž jen jednou z možností, které debugger gdb nabízí:
- Analýza výpisu paměti (core dump) - používá se pro odhalení příčin pádu aplikace, tzv. post mortem debugging.
- Ladění aplikace (debugging) - umožňuje zkoumat chování místní (na našem počítači) aplikace za běhu.
- Vzdálené ladění (remote debugging) - umožňuje zkoumat chování aplikace běžící na jiném počítači, typicky na cílovém zařízení.
Poznámka: Pro ladění aplikací přímo v cílových embedded zařízeních budeme samozřejmě používat křížovou variantu debuggeru gdb (cross-debugger) určenou pro naši cílovou platformu. To znamená, že debugger gdb poběží na našem počítači, ale přitom bude možné ladit aplikaci přímo v cílovém zařízení.
Všechny tři možnosti debuggeru gdb si vzápětí rozebereme více do detailů. Vše si budeme ukazovat na praktických příkladech, žadné teoretizování. A pokud máte k dispozici i nějaké to embedded zařízení, ukážeme si i jak ladit aplikaci, která běží přímo na něm.
Co nás čeká ...
Analýza výpisu paměti
Spustíme aplikaci a najednou bum! Aplikace byla ukončena a my obdržíme pouze stručné oznámení systému: ”Segmentation fault”. Co to? Nic, to nám jen Linux oznámil, že ukončil naši aplikaci, protože se pokoušela přistoupit k paměti, ke které nemá povolený přístup.
Ladění aplikace
Ukážeme si základní použití debuggeru gdb - jak probíhá ladění aplikace lokálně, tzn. když debugger i laděná aplikace běží na stejném počítači. Seznámíme se s ovládáním debuggeru gdb a naučíme se pracovat s jeho nejpoužívanějšími příkazy.
Vzdálené ladění
V předchozím textu jsme se naučili ladit aplikaci za běhu a dokonce i se k ní připojit v situaci, kdy začala během své činnosti vykazovat chyby. Jenže jak se ladí aplikace, která běží v cílovém zařízení?
Trasovací nástroje
Kromě debuggeru se ke zjišťování chyb v aplikaci používá i několik speciálních nástrojů, kterým se říká trasovací. Trasovací nástroje umožňují sledovat a zaznamenávat (trasovat) chování aplikace během jejího běhu a my si pár z nich stručně představíme.
Grafické nadstavby GDB
GNU debugger alias GDB je sice mocný nástroj, ale fakt, že se ovládá z příkazové řádky, může jeho ovládání činit pro řadu vývojářů obtížným. Naštěstí existuje několik grafických nadstaveb, které slouží jako grafický frontend gdb. Pojďme si ukázat ty nejznámější z nich.