Rusrails debugging egy hema - hibakeresővel
Ha a kód váratlanul viselkedik, beírhat egy naplóba vagy konzolba a probléma azonosításához. Sajnos, néha előfordul, hogy a hiba követésének ilyen módja nem hatékony a probléma okának megtalálásában. Ha ténylegesen át kell futnia a végrehajtható kódra, a debugger a legjobb partnere.
A hibakereső segíthet abban is, hogy megismerje a Rails forráskódját, de nem tudja, hol kezdjen. Egyszerűen hibakeresse a kérelmet az alkalmazásához, és használja ezt az útmutatót, hogy megtudja, hogyan változik a kódolt kódból a mozgás a Rails-kódba.
A sín egy gem hibakeresőt használ a bontási pontok konfigurálásához és az élő kódok átadásához. A telepítéshez egyszerűen futtassa:
A sávok beépített támogatást nyújtanak a hibakereséshez, kezdve a Rails 2.0-mal. A Rails bármely alkalmazásán belül a hibakeresõt a debugger módszerrel hívhatja.
Ha megjelenik egy üzenet a konzolban vagy a naplóban:
Ügyeljen arra, hogy elindítsa a webszervert a --debugger opcióval:
Fejlesztési módban dinamikusan hívhatja meg a \ "debugger \" kifejezést ahelyett, hogy újraindítja a kiszolgálót, ha a --debugger nélkül indult.
Miután az alkalmazás felhívja a hibakeresõt. a debugger elindul a debugger környezetben a terminál ablakban, ahol az alkalmazáskiszolgáló fut, és megjelenik a debugger (rdb: n) sor. n a szálak száma. A sorban a következő sor is megjelenik, amelyik a végrehajtásra vár.
Ha a böngészőtől érkezett egy kérés, akkor a kérelmet tartalmazó böngésző lap felfüggeszti, amíg a hibakereső befejeződik és a nyomkövetés befejezi a teljes kérelem feldolgozását.
Itt az ideje, hogy tanulmányozzon és ásson be az alkalmazásába. Kezdéshez jó segítséget kérni a hibakeresőtől ... így írj: segítséget (váratlanul, igaz?)
Az alábbi parancs, amelyet megtudunk, az egyik leghasznosabb: lista. A hibakereső parancsokat lerövidítheti, ha elegendő betűvel rendelkezik ahhoz, hogy megkülönböztesse őket más parancsoktól, így a lista parancsra használható.
Ez a parancs azt mutatja meg, hogy hol van a kód, 10 vonalat gépel az aktuális vonal közepén; Ebben az esetben a jelenlegi sor hatodik és jelölt =>.
Ha ismételjük meg a listát. Most csak l használunk. megjelenik a következő 10 sor.
És így tovább a jelenlegi fájl végére. Amikor elérte a fájl végét, a lista parancs újraindul a fájl elejétől, és folytatódik a végére, feldolgozza a fájlt körkörös pufferként.
Másrészt, hogy megnézze az előző tíz sort, írjon listát vagy l-.
Így navigálhat a fájlon belül, ha megnézed a kódot annak a vonalnak a előtt és után, amelybe a hibakeresőt hozzáadta. Végül, ha újra látni szeretnéd, hogy hol vagy a kódod, írj list =.
Amikor elkezdi az alkalmazás hibakeresését, akkor különböző környezetekben helyezkedik el, amikor a verem különböző részein halad át.
A hibakereső létrehoz egy kontextust, amikor elér egy töréspontot vagy eseményt. A kontextus információ felfüggesztését a program, amely lehetővé teszi, hogy a hibakereső megtekintheti a verem, a változók értékei tekintetében a program hibakeresést, és információkat tartalmaz a hely, ahol a program hibakeresést leáll.
Bármikor visszahívhat visszahívást (vagy annak záradékát), hogy kinyomtassa az alkalmazás nyomvonalát. Ez hasznos ahhoz, hogy tudd meg, hol vagy. Ha valaha is elgondolkoztál, hogy van valami a kódban, akkor a visszavágás megadja a választ.
Ebben a nyomvonalon megy át, ahová ez a nyomvonal (ez megváltoztatja a kontextust) a frame_n_ paranccsal. ahol n az adott keretszám.
A rendelkezésre álló változók megegyeznek, mintha a kódot soronként futtatnák. Végül ez valami hibakeresés.
Mozgás a veremkereten: használhatja a [n] (u) és a [n] utasításokat, hogy megváltoztassa az n kereteket a verem felfelé vagy lefelé. n alapértelmezés szerint egy. Ebben az esetben a nagyobb méretű stackkeretekre, valamint a kisebb számokból álló keretekre kerülnek.
A szálak (szálak)
A hibakeresõ megtekintheti, leállíthatja, újraindíthatja és átválthat a futó szálak között a szál paranccsal (vagy rövidítve). Ennek a parancsnak számos lehetősége van:
- a szál az aktuális szálat mutatja
- A téma listája az összes szálat és állapotát jeleníti meg. A pluszjel és a szám jelöli az aktuális végrehajtási szálat.
- A thread stop _n_ leállítja az n menetét.
- szál folytatása _n_ folytatja az n szálat.
- A _n_ szálkapcsoló az aktuális szál kontextusát n-re változtatja.
Ez a parancs nagyon hasznos, különösen akkor, amikor párhuzamos szálakat debugol, és meg kell győződnie arról, hogy a kódban nincs versenyfeltétel.
Bármelyik kifejezés kiértékelhető a jelenlegi kontextusban. A kifejezés kiszámításához írja be!
Ez a példa megmutatja, hogyan írhatja be az aktuális környezetben definiált instance_variableket:
Ahogy már megértettük, minden változó megjelenik, amelyhez hozzáférést kap a vezérlő. Ezt a listát dinamikusan frissíti a kód végrehajtása. Például, indítsa el a következő sort a következővel (majd ezt a parancsot egy kicsit később megnézzük ebben a bemutatóban).
Ezután ismét kérdezzen instance_variables:
Beállíthatod az irb módot az irb paranccsal (természetesen!). Így az irb munkamenet elindul az összefüggésben, ami okozta. Figyelmeztetjük azonban: ez egy kísérleti jellegzetesség.
A var módszer a változók és értékek megjelenítésének kényelmesebb módja:
A p (print) és a pp (pretty print) parancsok felhasználhatók a Ruby kifejezések értékeléséhez és a változók értékének megjelenítéséhez a konzolban.
A megjelenített listában szereplő változók az értékükön kerülnek kinyomtatásra, miután azokat a veremre helyezték. Egy változó megjelenítésének leállításához használja a _n_ nem_megjelenítést. ahol n a változó száma (az utolsó példában 1).
Lépésről lépésre
Most már tudod, hogy hol van a futó nyomon, és képesek nyomtatni a rendelkezésre álló változókat. Folytassuk és megismerjük az alkalmazás végrehajtását.
Használja a lépést (short for s), hogy folytassa a program futását addig, amíg a következő logikai breakpoint és return control debugger nem fut.
A lépést + n-et és az -i lépést is használhatod, ha előrelépéshez vagy visszafelé haladsz n lépéssel.
A következő is használható. amely a lépéshez hasonló, de egy sorban végrehajtott függvény vagy módszer végrehajtása leállítás nélkül történik. A lépéshez hasonlóan a pluszjelet az n lépésekre való áttéréshez használhatja.
A következő és a lépés közötti különbség az, hogy a lépés a végrehajtható kód következő sorában megáll, és csak egy lépést tesz meg, míg a következő a következő sorba lép, anélkül, hogy beléptetne volna a metódusokba.
Például, vegye figyelembe ezt a kódblokkot a mellékelt hibakereső kifejezéssel:
Segítségével hibakeresőt használhat a sínkonzol használatakor. Ne felejtsd el hívni a hibakeresőt, mielőtt hívtad a debugger módszert.
A kód megállt, nézzük vissza:
Ha mélyebbre szeretne lépni a köteg nyomában, akkor léphet egy lépéssel. a hívási módokon és a Rails kódon keresztül. Ez a legjobb módja annak, hogy megtalálja a hibákat a kódban, és esetleg a Ruby vagy a Rails.
töréspontok
A töréspont leállítja az alkalmazást, amikor elér egy bizonyos pontot a programban. Ez a sor hívja a debugger shell-et.
Bontási pontokat dinamikusan hozzáadhat a szünet parancshoz (vagy csak b). Három lehetséges mód van a töréspontok manuális hozzáadására:
- törésvonal. egy töréspontot állít be az aktuális forrásfájl sorában.
- break file: line [ha kifejezés]. egy töréspontot állít be a fájl fájl sorában. Ha kifejezés van megadva. értékelni kell, és egyenlőnek kell lennie a valódi értékkel. a debugger elindításához.
- törésosztály (. | #) módszer [ha kifejezés]. egy töréspontot állít be az osztály osztályban definiált metódusban (. és # módszer az osztályra és az instancstémákra). kifejezés ugyanúgy működik, mint a fájl: line.
A töréspontok listájának megjelenítéséhez használja az info töréspontokat _n_ vagy az info break _n_ parancsot. Ha megad egy számot, csak ez a töréspont jelenik meg. Ellenkező esetben minden töréspont megjelenik.
Töréspontok törlése: az n töréspontszám megszüntetéséhez használja a delete _n_ parancsot. Ha a szám nincs megadva, akkor az összes aktív töréspont törlődik.
A töréspontokat is engedélyezheti vagy letilthatja:
- lehetővé teszik a töréspontokat. engedélyezi a törlési pontok listáját, vagy mindegyiküket, ha a lista nincs meghatározva, hogy leállítsa a programot. Ez a létrehozott töréspontok alapértelmezett állapota.
- letiltja a töréspontokat. A töréspontok nem befolyásolják a programot.
Kivételek kivétele
A fogási kivétel-név (vagy csak a cat exception-name) parancs használható a kivétel-név kivételével. amikor a kezelőt egyébként hívják.
A végrehajtás folytatása
A debugger által leállított alkalmazás végrehajtásának kétféleképpen folytatható:
szerkesztés
A hibakeresőből való kilépéshez használja a quit parancsot (rövidítve q) vagy a kilépési álnevet.
Egy egyszerű kilépés megpróbálja megállítani az összes szálat. Ezért a kiszolgáló leáll, és újra be kell indítania.
- állítsa be az újratöltést. előtelepítse a forráskódot, amikor módosítja.
- állítsa be az autolistot. Futtassa a lista parancsot minden töréspontnál.
- állítsd ki a _n_ listát. Állítsa be a kódsorok számát alapértelmezés szerint. N.
- állítsa be a forcestepet. Győződjön meg róla, hogy a következő és lépés parancsok mindig új sorra váltanak
Ezek a beállítások elmenthetők a .rdebugrc fájlba a saját könyvtárban. A debugger ezeket a globális beállításokat olvassa el indításkor.
Íme egy jó kezdet a .rdebugrc számára: