Hibakereső
Ez a szócikk nem tünteti fel a független forrásokat, amelyeket felhasználtak a készítése során. Emiatt nem tudjuk közvetlenül ellenőrizni, hogy a szócikkben szereplő állítások helytállóak-e. Segíts megbízható forrásokat találni az állításokhoz! Lásd még: A Wikipédia nem az első közlés helye. |
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ő:
- a korábban Allinea DDT néven ismert Arm DTT
- Az IDE-k tartományában használt Eclipse hibakereső API: Eclipse IDE (Java) Nodeclipse (JavaScript)
- Firefox JavaScript hibakereső
- GDB - GNU hibakereső
- LLDB
- Microsoft Visual Studio Debugger
- Radare2
- Valgrind
- WDW, the OpenWatcom hibakereső
- WinDbg
Korábbi miniszámítógép hibakeresők:
- Dynamic debugging technique (DDT)
- On-line Debugging Tool (ODT)
Korábbi nagyszámítógép (Mainframe) hibakeresők:
- 1974 OLIVER CICS TEST/DEBUG
- 1980 SIMON BATCH TEST/DEBUG
- 1985 CA/EZTEST
- 1990 XPEDITER and Expediter CICS
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.