Vianetsintäkiskot Pry Debuggerilla

Osa 3 sarjassa A Comprehensive Guide To Debugging Rails

Rails Vianetsintä Pry: llä

jos et vielä tiedä, mikä vianetsintäsessio on, ajattele sitä Rails-konsolin avaamisena suorituspolun valitussa kohdassa.

oletan alla, että olet asentanut Pry-debuggerin ja pry-stack_explorer Gemsin.

missä tahansa kohdassa lähdekoodiasi (mukaan lukien ladatun koodin sisällä gemfileesi sisältyvistä jalokivistä, jotka on kätevästi avattu tekstieditorissa bundle open gem_name-ohjelmalla) voit lisätä rivisidonnan.Urkki. Aina kun Ruby-tulkki suorittaa tämän rivin, se pysäyttää sen, mitä se tekee, ja avaa Urkintasession siinä vaiheessa. Jos olet ollut yhteydessä verkkosivustoon selaimen kautta, Sinun on vaihdettava ohjelmia terminal console-välilehdelle, jossa Rails-palvelimesi oli käynnissä, jotta näet Urkintaistunnon.

selkeyden vuoksi selitettäessä, mitä seuraa, lisään tähän koodinpätkän.

def place_everyone_on_sale Seller.all.each do |seller| place_on_sale(seller) endenddef place_on_sale(seller) binding.pry # Execution will stop here. new_products = generate_products(seller) new_product.advertise new_productsenddef generate_products(seller) seller.documents.each do |document| document.place_online if document.releasable endend

Pry-konsolissasi on jo kaikki mainitut ominaisuudet, joilla voit tarkastaa tilan tai itsetutkiskella ohjelmaasi ls-tuotteen kaltaisilla ominaisuuksilla. Virheenkorjaus lisää pinon navigoinnin pinon kehysten yli. Lets lie hieman ja määritellä pino runko ”REPL konsoli avattu missä tahansa mahdollisista kohdista pitkin pino jäljittää miksi ehkä haluamme navigoida pino kehyksiä? Voit edelleen paikantaa virheemme etsimällä tarkempia syitä. Teemme tämän joskus etsimällä hetkeä, jolloin tietty muuttuja muuttaa arvoa (esim.eväste asetetaan). Toisinaan suunnistamme tarkkailemaan teloitusvirtaa ja vertaamme odottamaamme siihen, mitä näemme. Saatat esimerkiksi huomata, että If-else-Konstruktion väärä haara suoritettiin.

kun olet suorittanut place_everything_on_sale yllä olevassa koodinpätkässä, huomaat käynnistäneesi place_on_sale – menetelmän mukaisen Pry-istunnon ja esittäväsi kysymyksen siitä, mitä haluat tehdä seuraavaksi.

  • step-komento jatkaa suoritusta siirtämällä sinut seuraavalla rivillä olevaan menetelmään, muuttamalla pinon kehystä kyseisen menetelmän sisällä olevaksi. Toisella tavalla se menee syvemmälle. Koodiesimerkkimme mukaisesti ajaminen step tuo sinut generate_products – menetelmän piiriin, jolloin sinulta kysytään, mitä haluaisit tehdä seuraavaksi.

  • olet ”astunut” generate_products – menetelmään step edellä, mutta nyt olet päättänyt, että haluat siirtyä generated_products – menetelmän loppuun ilman, että vianetsijä kysyy navigointikomennon valintaa jokaisen rivin jälkeen. Kirjoita finish suoritettavaksi, kunnes nykyinen pinon kehys on ajanut jokaisen rivin, sulkenut ja palauttanut arvon, jolloin se nousee pintaan yhdellä tasolla, joka siirtyy takaisin siihen pinon kehykseen, josta olit aiemmin astunut ulos. Esimerkin mukaisesti, joka tuo sinut takaisin place_on_sale – menetelmään pisteeseen sen jälkeen, kun tulkki on arvioinut generated_products.

  • seuraava komento ajaa nykyisen rivin ja siirtyy seuraavalle riville tai menetelmälle nykyisessä kontekstissa eli etenee muuttamatta pinon kehystä. Fraseerattu toisella tavalla, jatka yksi rivi alas nykyisen menetelmän menemättä syvemmälle. Tarkasteltaessa koodiesimerkkiä (ja teeskennellen , että olimme juuri käynnistäneet ohjelmamme uudelleen, ajaneet place_everything_on_sale ja juuri avanneet Pry-istunnon), kirjoittamalla next suorittaa generate_productsin täysin pudottamatta sinua sen sisäosiin, sitten se antaa palautusarvon new_products-muuttujalle. Nexts ovat suurempia, että vaiheet, tai kiskot kannalta, seuraava has_mania vaiheita. Kaikki generate_products-menetelmän (joka olisi muuten monivaiheinen) koodi on päätelty next – komennon yhdellä käytöllä. Seuraava suunnistuspäätös on, astutko, seuraava on new_product.advertise.

  • hylkää Pry-istunto ja jatka ohjelman suoritusta normaalisti komennolla continue. Jos tulkki kohtaa toisen siteen.pry-lausuma, (joka tapahtuu, kun soitat place_everyone_on_sale – menetelmää yllä), se suorittaa place_on_sale-menetelmän kerran jokaista myyjää kohti, jolloin avataan Pry-istunto jokaisesta iteraatiosta. Tämä voi olla uskomattoman ärsyttävää, koska ohjelmasi pysähtyy ja sinun täytyy navigoida debuggerissa joka ikinen kerta, joten haluat luultavasti kirjoittaa exit-program peruuttaaksesi minkä tahansa seuraavan sitomisen vaikutuksen.urkintalausuntoja ilman, että Rails-ohjelmasi niin sanotusti poistuu.

  • Tarkastele menetelmän lähdekoodia, jossa olet tällä hetkellä: whereami Suuri varmistaaksesi, että olet oikeassa luokassa tai nähdäksesi, mihin olet päätynyt matkustettuasi muutaman ruudun läpi virheenkorjausistunnossasi.

  • tulosta ja navigoi kutsupino kun poikkeus nostetaan Rubyssa, se tulostaa pinon jäljityksen kaikista menetelmistä, joita kutsuttiin ennen kyseistä poikkeusta. Joskus haluat tarkastella pino jäljittää tähän asti, vaikka ei ole poikkeus esille. Yhden tietyn pry-laajennuksen ansiosta, joka on asennettu lisäämällä pry-stack_explorer helmi, voit tehdä tämän show-stack -v: llä. Tämä komento lähettää pinon jäljityksen osoittaen nykyisen kehyksen nuolella. Voit siirtyä toiseen kehykseen up tai ” up {n}”, esim.ylös 3 mennä ylöspäin kolme kehystä, joka on siirtää REPL yhteydessä menetelmä, joka kutsui menetelmää (ja niin edelleen…), joka lopulta kutsutaan menetelmä, jossa olet tällä hetkellä sijoitettu. Kirjoita show-stack nähdäksesi, minne olet siirtynyt pinossa, ja alas siirtääksesi kehyksiä vastakkaiseen suuntaan.

  • poistu kontekstista arvolla: Joskus haluat manipuloida ohjelman virtausta palauttamalla tietyn arvon Urkintaistunnosta. Kireänä esimerkkinä kuvitelkaa, että teillä olisi koodirivi, jossa luki first_name = binding.pry. Muuttujalle first_name annetaan tuloste Pry-istunnosta, ja voit asettaa tämän arvon Jackille arvolla exit "jack".

joskus haluat määrittää tarkalleen, milloin Sidonta.pry avaa urkintaistelun. Teen tämän Ruby code conditionals:

 binding.pry if session == true binding.pry if @first_name == "Jack" binding.pry if iteration > 4

Osa 3 sarjassa A Comprehensive Guide To Debugging Rails Rails Vianetsintä Pry: llä jos et vielä tiedä, mikä vianetsintäsessio on, ajattele sitä Rails-konsolin avaamisena suorituspolun valitussa kohdassa. oletan alla, että olet asentanut Pry-debuggerin ja pry-stack_explorer Gemsin. missä tahansa kohdassa lähdekoodiasi (mukaan lukien ladatun koodin sisällä gemfileesi sisältyvistä jalokivistä, jotka on kätevästi avattu tekstieditorissa bundle open…

Osa 3 sarjassa A Comprehensive Guide To Debugging Rails Rails Vianetsintä Pry: llä jos et vielä tiedä, mikä vianetsintäsessio on, ajattele sitä Rails-konsolin avaamisena suorituspolun valitussa kohdassa. oletan alla, että olet asentanut Pry-debuggerin ja pry-stack_explorer Gemsin. missä tahansa kohdassa lähdekoodiasi (mukaan lukien ladatun koodin sisällä gemfileesi sisältyvistä jalokivistä, jotka on kätevästi avattu tekstieditorissa bundle open…

Vastaa

Sähköpostiosoitettasi ei julkaista.