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 és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.