Hibakeresés a PyneIDE-ben
Töréspontnál megállítod a programot, és gyertyánként ellenőrzöd a változóit.
A kód lehet szabályos, miközben más eredményt számol, mint amit szeretnél. A debuggerrel megállíthatod a futást, megnézheted a változókat, és egyenként követheted az utasításokat.
Ebben a fejezetben a záróár és az ötös mozgóátlag távolságát vizsgálod. Előbb megjósolod az eredményt, majd megnézed, mit számított a program.
Háromféle hiba
A szintaktikai hiba a kód írási szabályát sérti. Ilyen egy hiányzó kettőspont vagy hibás behúzás. A szerkesztő ezt gyakran már gépeléskor jelzi.
A futási hiba a program végrehajtásakor jelentkezik. Például egy tömbből olyan indexet olvasol, amelyhez nincs elem. Ilyenkor a futás hibaüzenettel megállhat.
A logikai hiba mellett a program lefuthat. Ha close - average helyett average - close szerepel a kódban, az eredmény előjele megfordul. A nyelvi szabályok ezt nem tiltják, ezért neked kell összevetned az eredményt a feladattal.
A Visual Studio Code View → Problems nézetében a szerkesztő által jelzett problémákat találod. Kattints egy sorra, hogy a hibás helyre ugorj. A részletes hibaüzenetet olvasd el, mielőtt több sor átírásába kezdesz.
Egy vizsgálható program
Hozd létre a debug_average.py fájlt:
"""
@pyne edge
"""
from pynecore import Series
from pynecore.lib import bar_index, close, color, log, plot, script, ta
@script.indicator("Average Distance", overlay=False)
def main():
average: Series[float] = ta.sma(close, 5)
gap = close - average
if bar_index == 10:
log.info("close={0}, average={1}, gap={2}", close, average, gap)
plot(gap, "Distance", color=color.blue)A bar_index az éppen feldolgozott gyertya sorszáma, nulláról indul. A 10-es index a tizenegyedik gyertya. A naplóhívás ezért csak egyszer ír ebben a történelmi futásban.
A log.info formázott üzenetet készít. A {0}, {1} és {2} helyére a mögöttük megadott három érték kerül, ebben a sorrendben. A számozott helyeket tartalmazó szöveget a naplózó dolgozza fel.
Futtasd a programot egyszer a Run Pyne code művelettel. A vonalnak akkor kell pozitívnak lennie, amikor a záróár az átlag fölött van. Az első négy gyertyán az átlag és a távolság is hiányzik.
Megállás egy adott sor előtt
- Kattints a sorszám bal oldalára a
plot(gap, ...)sor mellett. Megjelenik a töréspont jele. - A kód fölött kattints a Debug műveletre.
- Ha adatválasztás jelenik meg, válaszd a
demosort. - A program a töréspontnál megáll. Nyisd meg a Run and Debug nézetet.
A töréspont egy olyan hely, ahol a debugger megállítja a programot. A kijelölt sor még nem futott le. A sor előtti értékadások eredményét már megnézheted.
Az első megállás az első gyertyán lehet. Ott a gap hiányzó érték, mert nincs teljes ötgyertyás ablak. A debugger ezt a helyzetet mutatja; a hiány önmagában nem programhiba.
Juss el egy bemelegedett gyertyához
A hibakeresés közben megjelenő lebegő eszköztáron a PyneIDE Next Bar gombja a következő gyertyára lép. Az ikonok nevét az egérmutatót föléjük tartva olvashatod el. Keresd meg a Run to Bar… gombot, kattints rá, majd a megjelenő mezőbe írj 10-et, és nyomd meg az Enter billentyűt.
A tizenegyedik gyertyán már van teljes ötös átlagablak. A Variables listában keresd az average és a gap változót. A Pyne csoportban a feldolgozott gyertya adatait, köztük a bar_index és close értékét ellenőrizheted.

Az average Series változó, ezért a program kódjában az average[1] kifejezéssel az előző értékét is használhatod. Az előző gyertya átlaga nem szükségképpen azonos a mostani átlaggal, mert az ablak egy gyertyával tovább mozdult.
Figyelt kifejezések
A Watch részben hozzáadhatsz olyan kifejezést, amelyet minden megálláskor látni szeretnél. Próbáld ki:
close
close[1]
average
close - averageA close[1] a megállított gyertyához képest korábbi záróár. Az average a saját változód. A close - average eredményének egyeznie kell a már kiszámított gap értékével.
Változókat és egyszerű számításokat figyelj. A Watch mezőbe ne tegyél ta.sma hívást, megbízást küldő műveletet vagy tömböt módosító hívást. A hibakeresési ellenőrzés ne változtassa meg a program állapotát.
Soronként és gyertyánként
A Step Over a következő utasításig lép anélkül, hogy egy meghívott függvény részleteibe bemennél. A Step Into beléphet a saját függvényedbe. A Continue a következő megállásig folytatja a futást, a Disconnect megszakítja a hibakereső kapcsolatot, és befejezi a hibakeresést.
A Next Bar más lépték: egy következő gyertyára visz. A soronkénti léptetés egyetlen gyertya számítását mutatja részletesen, a gyertyánkénti pedig azt, hogyan változik az eredmény időben.
A megállított gyertya feldolgozása még nem fejeződött be, ezért a grafikon a korábban elkészült állapotot mutathatja. A mostani gyertya indexét és adatait a Pyne csoportban ellenőrizd.
Mielőtt leolvasol egy változót, nézd meg a kijelölt sort. Ha az értékadás még előtted áll, a változó még nem a most várt eredményt tartalmazza.
Egy előjelhiba megtalálása
Állítsd le a debuggert. Írd át ezt a sort:
gap = average - closeMost indítsd újra a hibakeresést, és menj ugyanahhoz a gyertyához. Ha az ár az átlag fölött van, a gap negatív lesz, miközben a feladat pozitív távolságot kért.
A Watch mezőben a close - average továbbra is az eredeti, kívánt irányt mutatja. A két érték összevetése azonnal megmutatja az eltérést. Állítsd vissza a helyes kivonást, és ellenőrizd még egyszer ugyanazt a gyertyát.
Próbáld ki önállóan
Adj a programhoz egy previous_close = close[1] változót, és vizsgáld meg a debuggerben. A 10-es gyertyaindexnél melyik indexű gyertya záróárát kell tartalmaznia? Mi az értéke a legelső gyertyán?
A feladat megoldása
previous_close = close[1]A 10-es gyertyán a 9-es gyertya záróárát adja. A legelső, 0 indexű gyertyán hiányzik, mert az adatfájlban nincs korábbi gyertya.
A sort a töréspont elé írd, hogy megálláskor már lefusson. A vizsgálat után a segédváltozót és a csak ellenőrzésre használt naplósort elhagyhatod a programból.
Egy jó hibaleírás
Ha segítséget kérsz, add meg a fájlt, a használt adatot, a tényleges inputokat és a vizsgált gyertya időpontját. Írd le a várt és a kapott értéket is. A „nem jó a vonal” helyett például: „ennél a gyertyánál a záróár 101, az átlag 100, de a távolság −1 lett”. Ebből a számítás ellenőrizhető.