Hibakereső

A Wikipédiából, a szabad enciklopédiából
Ugrás a navigációhoz Ugrás a kereséshez

A hibakereső vagy hibakeresési eszköz egy számítógépes program, amelyet más programok tesztelésére és hibakeresésére használnak (a "cél" [target] program). A hibakeresőt főként a célprogram ellenőrzött körülmények között történő futtatására használják, amely lehetővé teszi a programozó számára, hogy nyomon kövessék a célprogram folyamatban lévő műveleteit és hogy figyelemmel kísérjék a számítógépes erőforrások változásait (ezek leggyakrabban a célprogram vagy a számítógép operációs rendszere által használt memóriaterületek), amik hibás programkódot jelezhetnek. A tipikus hibakeresési lehetőségek magukban foglalják a célprogram futtatását vagy leállítását egy adott ponton, a memória tartalmának megjelenítését, a CPU-regiszterek vagy a tárolóeszközök (például lemezmeghajtók) tartalmának megjelenítését, illetve a memória módosítását vagy a tartalom regisztrálását a kiválasztott tesztadatok bevitele céljából, ami a hibás programvégrehajtás oka lehet.

A megvizsgálandó kód alternatívaként egy ún. utasításkészlet-szimulátoron ( Instruction Set Simulator) is futhat. Az utasításkészlet-szimulátor (ISS) egy technika, amely nagy teljesítményt nyújt a megállási képességében bizonyos körülmények felmerülésekor, de általában valamivel lassabb a kód közvetlenül a megfelelő (vagy ugyanazon) processzoron történő végrehajtásánál. Néhány hibakereső kétféle működési módot kínál, teljes vagy részleges szimulációt, a célból, hogy korlátozza ezt a hatást.

A csapda (trap) akkor fordul elő, amikor a program nem tud normál módon folytatódni egy bug vagy érvénytelen adatok miatt. Olyan esetekben fordulhat ez elő, ha például a program megkísérelte használni a CPU jelenlegi verzióján nem elérhető utasításokat vagy megpróbált hozzáférni nem elérhető vagy védett memóriához. Amikor a program "csapdába esik" vagy elér egy előre beállított állapotot, a hibakereső, ha forrásszintű hibakereső vagy szimbolikus hibakereső, amely általában az integrált fejlesztési környezetben látható, általában megmutatja a helyet az eredeti kódban. Viszont, ha alacsony szintű hibakereső vagy gépi nyelvű hibakereső, akkor a disassembler kimenetében, amely ember által olvasható formátumot nyújt, megjelenik a sor (hacsak nem rendelkezik online hozzáféréssel az eredeti forráskódhoz és képes megjeleníteni a megfelelő kódrészletet a „szimbolikus gép kódból” (assembly) vagy a fordítóprogramból (compiler)).

Jellemzők[szerkesztés]

A hibakeresők általában lekérdezési processzort, szimbólum megoldót, egy kifejezés-értelmezőt és egy hibakeresési támogatási felületet kínálnak. A hibakeresők további kifinomultabb funkciókat is kínálnak, úgymint egy program lépésről lépésre (step-by-step) történő futtatása (egylépéses vagy programanimáció), továbbá a program leállítása („törése”, azaz breaking, a program megállítása az aktuális állapot megvizsgálására) egy töréspont (breakpoint) segítségével bizonyos esemény vagy egyéb meghatározott utasítás előfordulásának helyén a kódban, valamint a változók értékeinek nyomon követése. Egyes hibakeresők képesek módosítani a program állapotát annak futása közben. Lehetőség van a végrehajtást a programon belül máshol is futtatni az összeomlás vagy a logikai hibák megkerülésének céljából.

Ugyanaz a funkcionalitás, amely a hibakeresőt hasznosítja a hibák kijavításában, szoftverkalózkodó eszközként (software cracking tool) is használatos a másolásvédelem, a digitális jogkezelés és más szoftvervédelmi szolgáltatások megkerülésére. Ez gyakran általános ellenőrző eszközként, hibalefedettségként és teljesítményelemzőként is használható, különösen akkor, ha az utasítások elérési útjának hossza rendelkezésre áll. A korai, lemezalapú tárolóval rendelkező mikroszámítógépek gyakran rendelkeztek a sérült könyvtári- vagy nyilvántartási adatrekordok diagnosztizálásának és helyreállításának, a töröltként megjelölt fájlok visszaállításának és fájlok jelszavas védelmének feltörésének képességével.

A legtöbb irányadó hibakeresési motor, például a gdb és dbx, konzol alapú parancssoros felhasználói felületeket biztosít. A hibakereső front-endek a hibakereső motorok népszerű bővítményei, amelyek IDE integrációt, programanimációt és megjelenítő szolgáltatásokat nyújtanak.

Hibakeresés rögzítése és megismétlése[szerkesztés]

A hibakeresés rögzítésére és megismétlésére használatos kifejezésként szolgál a "szoftverrepülés (flight) rögzítése" vagy "program végrehajtás rögzítése". Ez a művelet magában foglalja az alkalmazásban a program egyes utasításainak végrehajtásának eredményeképp bekövetkezett állapotváltozásainak rögzítését és lemezen történő tárolását. A felvétel ezután újra és újra lejátszható, továbbá interaktív módon hibakeresés végezhető a hibák diagnosztizálása és megoldása érdekében. Mindez nagyon hasznos a távoli hibakeresésben, valamint az időszakos, nem determinisztikus és más nehezen reprodukálható hibák megoldásában.

Fordított hibakeresés[szerkesztés]

Néhány hibakereső tartalmaz egy ún. "fordított hibakeresés", más néven "történelmi hibakeresés" vagy "visszamenőleges hibakeresés" nevű funkciót. Ezen funkcióval rendelkező hibakeresők lehetővé teszik az időben visszafelé történő lépést egy program végrehajtásában. A Microsoft Visual Studio (2010 Ultimate Edition, 2012 Ultimate, 2013 Ultimate és 2015 Enterprise Edition) IntelliTrace fordított hibakeresést kínál a C#, a Visual Basic .NET és néhány más nyelv részére, de a C ++ számára nem. Fordított hibakeresők léteznek C, C ++, Java, Python, Perl és más nyelvekre is. Néhányuk nyílt forráskódú, míg mások szabadalmaztatott kereskedelmi szoftverek. Néhány fordított hibakereső nagyságrendekkel lelassítja a célt, de a legjobb fordított hibakeresők legfeljebb kétszeres lassulást okoznak. A fordított hibakeresés nagyon hasznos bizonyos típusú problémák esetén, azonban még mindig nem használják általánosan.

Nyelvi függőség[szerkesztés]

Egyes hibakeresők egyetlen meghatározott nyelven működnek, míg mások több nyelvet is kezelhetnek. Például, ha a fő célprogram COBOL programozási nyelven íródott, de meghív assembly és PL/1 alprogramokat (subroutine), akkor a hibakeresőnek dinamikusan kell átváltania az üzemmódokat, hogy alkalmazkodjon a nyelv változásaihoz, amint azok bekövetkeznek.

Memóriavédelem[szerkesztés]

Egyes hibakeresők memóriavédelmet is magukban foglalnak, hogy elkerüljék a tárolási megsértéseket, például a puffertúlcsordulást. Ez rendkívül fontos lehet egy olyan tranzakciófeldolgozó környezetben, ahol a memóriát dinamikusan osztják el a memória „készleteiből” feladatonként.

Hardvertámogatás a hibakereséshez[szerkesztés]

A legtöbb modern mikroprocesszor a processzor kialakításában (design) rendelkezik legalább egy tulajdonsággal az alább felsoroltak közül, hogy könnyebbé tegye a hibakeresést:

  • Hardver támogatás egylépéses (single-stepping) programhoz, mint például a trap flag.
  • A Popek és Goldberg virtualizációs követelményeknek megfelelő utasításkészlet megkönnyíti a hibakereső szoftver írását, amely ugyanazon a CPU-n fut, mint a hibakeresés alatt álló szoftver. Egy ilyen CPU teljes sebességgel képes végrehajtani a vizsgált program belső ciklusait és továbbra is hibakereső ellenőrzés alatt áll.
  • Az ISP (In-system programming) lehetővé tesz egy külső hibakeresőt egy teszt alatt álló rendszer újra programozásához (például utasítások töréspontjának hozzáadása vagy eltávolítása). Számos ilyen ISP-támogatást magában foglaló rendszer rendelkezik más hardverhiba-támogatással is.
  • JTAG hozzáférés a hardver hibakeresési interfészekhez, például az ARM architektúra processzorokhoz vagy a Nexus parancskészlet használatához. A beágyazott rendszerekben használt processzorok általában kiterjedt JTAG hibakeresési támogatással rendelkeznek.
  • Az olyan mikrokontrollerek, amelyek mindössze 6 tűvel rendelkeznek, a 16-bites architektúrájú ISA busz helyettesítőjeként az Intel által 1998-ban bevezetett 4-bites architektúrájú LPC (Low Pin Count) buszt használják a JTAG-hez, mint például a beágyazott rendszerek számára hibakeresést biztosító BDM elektronikus interfész, a Spy-Bi-Wire szerializált JTAG protokoll vagy a DebugWIRE az Atmel vállalat AVR mikrovezérlő-családjánál. A DebugWIRE például kétirányú jelzést használ a RESET tűn.

Hibakereső front-endek[szerkesztés]

A legnépszerűbb hibakeresők közül néhány csak egy egyszerű parancssori felületet (CLI) valósít meg, főként a hordozhatóság maximalizálása és az erőforrás-felhasználás minimalizálása érdekében. Azonban a fejlesztők általában a grafikus felhasználói felületen (GUI) keresztül történő hibakeresést tartják könnyebbnek és eredményesebbnek. Ez az oka a vizuális front-endek létezésének, amelyek lehetővé teszik a felhasználók számára, hogy grafikus felhasználói felületen keresztül felügyeljék felügyeljék és vezéreljék a csak CLI-hibakeresőket (CLI-only debugger). Néhány GUI hibakeresők front-endjeit úgy tervezték, hogy kompatibilisek legyenek a különféle csak CLI-hibakeresőkkel, míg mások egyetlen konkrét hibakeresőt támogatnak.

Hibakeresők listája[szerkesztés]

Néhány széles körben használatos hibakereső:

Korábbi miniszámítógép hibakeresők:

Korábbi nagyszámítógép (Mainframe) hibakeresők:

Jelenlegi meghatározó hibakeresők:

Fordítás[szerkesztés]

Ez a szócikk részben vagy egészben a Debugger című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.