Bod zlomu - Breakpoint

Ladicí rozhraní Eclipse s programem pozastaveným v bodě zlomu. Lze vidět panely se sledováním zásobníku (vlevo nahoře) a sledovanými proměnnými (vpravo nahoře).

Ve vývoji softwaru je zarážkou záměrné zastavení nebo pozastavení místa v programu , které bylo zavedeno pro účely ladění . Někdy se také jednoduše označuje jako pauza .

Obecněji je zarážka prostředkem k získání znalostí o programu během jeho provádění. Během přerušení je programátor kontroluje testovací prostředí ( univerzálních registrů , paměti , protokoly, soubory , atd.) Zjistit, zda je tento program funguje, jak se očekávalo. V praxi se bod zlomu skládá z jedné nebo více podmínek, které určují, kdy má být provádění programu přerušeno.

Podmínky bodu zlomu

Body přerušení se nejčastěji používají k přerušení běžícího programu bezprostředně před provedením instrukce specifikované programátorem . Toto se často označuje jako zarážka instrukce .

Lze použít i jiné druhy podmínek, jako je čtení, zápis nebo úprava konkrétního umístění v oblasti paměti. To se často označuje jako podmíněný bod zlomu , bod zlomu dat nebo bod sledování .

Body přerušení lze také použít k přerušení provádění v určitém čase, při stisknutí klávesy atd.

Inspekční nástroje

Když je zasažen bod zlomu, používají se různé nástroje ke kontrole stavu programu nebo jeho změně. Stohovou stopu každého vlákna lze použít k zobrazení řetězce volání funkcí, které vedlo k pozastavené instrukci. Seznam hodinek umožňuje zobrazit hodnoty vybraných proměnných a výrazů . Mohou existovat také nástroje pro zobrazení obsahu registrů , načtených programových modulů a dalších informací.

Implementace

Hardware

Mnoho procesorů zahrnuje hardwarovou podporu pro zarážky (obvykle instrukční a datové zarážky). Jako příklad poskytuje architektura instrukční sady x86 hardwarovou podporu pro zarážky pomocí jejích ladicích registrů x86 . Takový hardware může zahrnovat omezení, například neumožňuje zarážky na instrukcích umístěných ve slotech zpoždění větví . Tento druh omezení je dán mikroarchitekturou procesoru a liší se od procesoru k procesoru.

Software

Bez hardwarové podpory (a v prostředích s více úkoly) musí debuggery implementovat zarážky v softwaru. Pro zarážky instrukcí se jedná o poměrně jednoduchý úkol nahrazení instrukce v místě zarážky buď:

  • instrukce, která přímo volá debugger (např. systémové volání ) nebo
  • neplatná instrukce, která způsobí úmyslné přerušení programu (který je poté zachycen / zpracován ladicím programem)

Tuto techniku ​​může být obtížnější implementovat v multitaskingových systémech využívajících sdílené úložiště programu (přerušení může nastat v jiném vlákně, což vyžaduje vzkříšení původní instrukce pro toto vlákno). Také pokud je program umístěn v chráněné paměti, může být zabráněno přepsání pokynů.

Alternativně,

  • instrukční sada simulátor může implementovat nepodmíněné nebo podmíněné zarážky, pouhým vložením odpovídajícím stavu zkoušky v rámci svého normálního cyklu programu - to také samozřejmě umožňuje neinvazivní zarážky (na pouze pro čtení programů například).
  • Interpretované jazyky mohou ve svém programovém cyklu efektivně využívat stejný koncept jako výše.
  • „Instrumentování“ veškerého zdrojového kódu dalšími zdrojovými příkazy, které vydávají funkci, která vyvolá interní nebo externí ladicí podprogram, je dalším běžným přístupem. Tato metoda zvyšuje binární velikost a může nepříznivě ovlivnit normální přidělení paměti a obslužné rutiny výjimek . U některých překladačů existují možnosti „ladění“, které tuto techniku ​​implementují poloprůhledně.

Některé debuggery umožňují před obnovením úpravy registrů nebo programových proměnných v paměti, což účinně umožňuje zavedení „ručně kódovaných“ dočasných přiřazení pro účely testování. Podobně lze často přeskočit pokyny programu, aby se určil účinek změn logiky programu - což umožňuje přímé odpovědi na otázky týkající se provádění programu (tj. Bez předpokladů nebo dohadů). V mnoha případech může jít o jedinou praktickou metodu testování obskurních „událostmi řízených“ chybových podprogramů, které se zřídka, pokud vůbec, provedou - bez dalšího rizika opuštění dočasných změn zdroje. Ruční zadání umístění obnovení v pozastaveném programu lze použít k zadání jinak zřídka provedené části kódu (například konkrétní obslužné rutiny stavu hardwaru).

Implementace datových hraničních bodů v softwaru však může výrazně snížit výkon laděné aplikace - protože používá další zdroje na stejném procesoru. To je však během testování normálně přijatelné a množství informací dostupných z debuggeru není omezeno omezeními ladicích dat známých hardwaru. Například softwarová implementace může shromažďovat data logické cesty na úrovni programu / podprogramu / instrukce, aby výrazně rozšířila to, co by mohla být uložena konkrétní hardwarovou platformou pro kontrolu. Metoda simulace sady instrukcí značně snižuje režii ve srovnání s (opakovanou) metodou nahrazování instrukcí, což také omezuje vynechání mezipaměti .

Některé implementace programovacího jazyka vystavují své ladicí funkce pro použití v jiných programech. Například některé dialekty FORTRAN mají ATpříkaz, který měl původně fungovat jako zarážka instrukce. Python implementuje debugger přístupný z programu Python. Tato zařízení mohou být a jsou zneužívána k tomu, aby fungovala jako příkaz COMEFROM .

Dějiny

Hraniční hodnoty vynálezu byly pro ENIAC , jeden z prvních digitálních počítačů, vynalezeny programátorkou Betty Holbertonovou . V počátečním návrhu ENIAC byl tok programu nastaven připojením kabelů z jedné jednotky do druhé. Aby se program v určitém bodě zastavil, byl odstraněn kabel, který se nazývá zarážka .

Zarážky stroje Brzy mainframové počítače, jako například IBM / 360 , měly přepínače / vytáčení konzoly, které umožňovaly zarážky na konkrétních adresách paměti instrukcí a poskytovaly operaci „jednoho cyklu“, což umožňovalo sledovat obsah registrů a paměti přímo na kontrolách konzoly. Příchod multitaskingu omezil použití této možnosti, protože celý stroj byl zastaven.

Neinteraktivní zarážky Programátoři použili opravy strojového kódu k implementaci jednotlivých destruktivních zarážek, které způsobily výpis jádra od počátků počítačů. Výpis jádra poskytoval stav registrů a paměti v přesný okamžik úmyslného „pádu“.

Interaktivní zarážky Příchod konzol dálnopisného psaní v 60. letech umožnil více interaktivních funkcí ladění příkazového řádku , ale až na začátku 70. let a příchodem všudypřítomných video monitorů připojených k sálovým počítačům se plně interaktivní ladění na celou obrazovku v prostředí multitaskingu stalo realitou. To také umožňovalo postupné provádění programu skutečným způsobem animace programu s možností současného zobrazení volitelných změn registru a paměti. Zpočátku byl tento typ animace na úrovni rozebraného nebo dekompilovaného strojového kódu, ale později pokročil na animaci na úrovni zdroje HLL .

Viz také

Reference