Debugger - Debugger

Ladění Winpdb samotné

Debugger nebo ladění nástroj je počítačový program použitý pro testovací a ladění dalších programů (program „target“). Hlavní použití ladicího programu je spuštění cílového programu za kontrolovaných podmínek, které umožňují programátorovi sledovat probíhající operace a sledovat změny v prostředcích počítače (nejčastěji oblasti paměti používané cílovým programem nebo operačním systémem počítače), které mohou indikovat nefunkční kód. Mezi typické možnosti ladění patří schopnost spustit nebo zastavit cílový program v určitých bodech, zobrazit obsah paměti, registry CPU nebo úložná zařízení (například diskové jednotky) a upravit paměť nebo obsah registru za účelem zadání vybraných testovacích dat, která by mohla být příčinou chybného spuštění programu.

Zkoumaný kód může být alternativně spuštěn na simulátoru instrukční sady (ISS), což je technika, která umožňuje velkou schopnost zastavit se při výskytu specifických podmínek, ale která bude obvykle poněkud pomalejší než spouštění kódu přímo na příslušném (nebo stejný) procesor. Některé ladicí programy nabízejí dva režimy provozu, úplnou nebo částečnou simulaci, aby se tento dopad omezil.

K " pasti " dochází, když program nemůže normálně pokračovat kvůli chybě v programování nebo neplatným datům. Program se například mohl pokusit použít instrukci, která není k dispozici v aktuální verzi CPU, nebo se pokusit o přístup k nedostupné nebo chráněné paměti . Když se program „zachytí“ nebo dosáhne přednastavené podmínky, ladicí program obvykle zobrazí umístění v původním kódu, pokud se jedná o ladicí program na úrovni zdroje nebo symbolický ladicí program , který je nyní běžně k vidění v integrovaných vývojových prostředích . Pokud se jedná o nízkoúrovňový debugger nebo debugger strojového jazyka , zobrazí řádek v rozebrání (pokud nemá také online přístup k původnímu zdrojovému kódu a může zobrazit příslušnou část kódu ze sestavy nebo kompilace).

Funkce

Ladicí programy obvykle nabízejí procesor dotazů, překladač symbolů, interpret výrazů a rozhraní podpory ladění na nejvyšší úrovni. Ladiče také nabídnout více sofistikované funkce, jako je běh programu krok za krokem ( single-krokování nebo programového animace ), zastavení ( přerušení ) (pozastavení programu zkoumat současný stav) na nějakou událost nebo zadaný pokyn vydaný prostřednictvím zlomu , a sledování hodnot proměnných. Některé ladicí programy mají možnost upravit stav programu, když je spuštěný. Může být také možné pokračovat v provádění na jiném místě v programu, aby se obešlo selhání nebo logická chyba.

Stejná funkce, díky které je debugger užitečný pro opravu chyb, jej umožňuje použít jako nástroj pro prolomení softwaru k obcházení ochrany proti kopírování , správy digitálních práv a dalších funkcí ochrany softwaru. Často je také užitečný jako obecný ověřovací nástroj, pokrytí chyb a analyzátor výkonu , zejména pokud jsou zobrazeny délky cesty instrukce . Počáteční mikropočítače s diskovým úložištěm často těžily ze schopnosti diagnostikovat a obnovovat poškozené datové záznamy adresářů nebo registrů, „obnovit“ soubory označené jako odstraněné nebo prolomit ochranu souborů heslem.

Většina běžných ladicích strojů, jako jsou gdb a dbx , poskytuje rozhraní příkazového řádku založená na konzole . Rozhraní ladicího programu jsou oblíbená rozšíření modulů ladicích programů , která poskytují integraci IDE , animaci programu a funkce vizualizace.

Nahrajte a přehrajte ladění

Ladění záznamu a přehrávání , známé také jako „nahrávání letu se softwarem“ nebo „nahrávání provádění programu“, zachycuje změny stavu aplikace a ukládá je na disk při provádění každé instrukce v programu. Nahrávku lze poté znovu a znovu přehrávat a interaktivně ladit pro diagnostiku a řešení závad. Ladění záznamu a přehrávání je velmi užitečné pro vzdálené ladění a pro řešení přerušovaných, nedeterministických a jiných těžko reprodukovatelných vad.

Reverzní ladění

Některé debuggery obsahují funkci zvanou „ zpětné ladění “, známé také jako „historické ladění“ nebo „zpětné ladění“. Tyto ladicí programy umožňují krokovat provádění programu zpět v čase. Různé debuggery obsahují tuto funkci. Microsoft Visual Studio (edice 2010 Ultimate, 2012 Ultimate, 2013 Ultimate a 2013 Enterprise) nabízí reverzní ladění IntelliTrace pro C#, Visual Basic .NET a některé další jazyky, ale ne pro C ++. Reverzní ladicí programy existují také pro jazyky C, C ++, Java, Python, Perl a další. Některé jsou open source; některé jsou proprietárním komerčním softwarem. Některé reverzní debuggery zpomalují cíl řádově, ale nejlepší reverzní debuggery způsobují zpomalení 2 × nebo méně. Zpětné ladění je velmi užitečné pro určité typy problémů, ale stále se ještě běžně nepoužívá.

Jazyková závislost

Některé debuggery fungují v jednom konkrétním jazyce, zatímco jiné dokážou transparentně zpracovat více jazyků. Pokud je například hlavní cílový program napsán v COBOLu, ale volá podprogramy sestavovacího jazyka a podprogramy PL/1 , může debugger muset dynamicky přepínat režimy, aby vyhověl změnám jazyka, jak nastanou.

Ochrana paměti

Některé debuggery také obsahují ochranu paměti, aby se zabránilo narušení úložiště , jako je přetečení vyrovnávací paměti . To může být velmi důležité v prostředích zpracování transakcí, kde je paměť dynamicky přidělována z „fondů“ paměti na základě úkolů po úkolu.

Hardwarová podpora pro ladění

Většina moderních mikroprocesorů má ve svém návrhu CPU alespoň jednu z těchto funkcí, které usnadňují ladění:

  • Hardwarová podpora pro krokování programu, například příznak trapu .
  • Sada instrukcí, která splňuje požadavky na virtualizaci Popek a Goldberg , usnadňuje psaní debuggerového softwaru, který běží na stejném CPU jako software, který se ladí; takový CPU může vykonávat vnitřní smyčky testovaného programu plnou rychlostí a stále zůstává pod kontrolou ladicího programu.
  • Programování v systému umožňuje externímu hardwarovému debuggeru přeprogramovat testovaný systém (například přidání nebo odebrání zarážek instrukcí). Mnoho systémů s takovou podporou ISP má také další podporu ladění hardwaru.
  • Hardwarová podpora pro zarážky kódu a dat , jako jsou komparátory adres a porovnávače hodnot dat, nebo, s podstatně větším množstvím práce, hardware chyby stránky .
  • Přístup JTAG k hardwarovým ladicím rozhraním, jako jsou ta na procesorech architektury ARM nebo pomocí sady příkazů Nexus . Procesory používané ve vestavěných systémech mají obvykle rozsáhlou podporu ladění JTAG.
  • Mikroprocesory s pouhými šesti piny musí používat náhražky s nízkým počtem pinů pro JTAG, jako je BDM , Spy-Bi-Wire nebo debugWIRE na Atmel AVR . DebugWIRE například používá obousměrnou signalizaci na pinu RESET.

Rozhraní ladicího programu

Některé z nejschopnějších a nejpopulárnějších debuggerů implementují pouze jednoduché rozhraní příkazového řádku (CLI) - často k maximalizaci přenositelnosti a minimalizaci spotřeby zdrojů. Vývojáři obvykle považují ladění pomocí grafického uživatelského rozhraní (GUI) za jednodušší a produktivnější. To je důvod pro vizuální rozhraní, která uživatelům umožňují sledovat a ovládat podřízené ladicí nástroje pouze pro CLI prostřednictvím grafického uživatelského rozhraní . Některé klientské rozhraní ladicího programu GUI jsou navrženy tak, aby byly kompatibilní s různými ladicími programy pouze pro CLI, zatímco jiné jsou zaměřeny na jeden konkrétní debugger.

Seznam debuggerů

Některé široce používané debuggery jsou:

Dřívější ladicí programy minipočítačů zahrnují:

Dřívější ladicí programy sálových počítačů zahrnují (podle data vydání objednávky):

  • 1974 TEST/DEBUG OLIVER CICS
  • 1980 ZKOUŠKA/DEBUG SIMON BATCH
  • 1985 CA/EZTEST
  • 1990 XPEDITER a Expediter CICS

Aktuální debuggery sálových počítačů:

  • Nástroj pro ladění pro z/OS
  • XPEDITER a Expediter CICS
  • z/XDC

Viz také

Reference

  • Sanjeev Kumar Aggarwal; M. Sarath Kumar (2003). „Debuggery pro programovací jazyky“. V YN Srikant; Priti Shankar (eds.). Příručka návrhu kompilátoru: Optimalizace a generování strojového kódu . Boca Raton, Florida: CRC Press . s. 295–327. ISBN 978-0-8493-1240-3.
  • Jonathan B. Rosenberg (1996). Jak debuggery fungují: Algoritmy, datové struktury a architektura . John Wiley & Sons . ISBN 0-471-14966-7.

Citace

externí odkazy