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 sinutgenerate_products
– menetelmän piiriin, jolloin sinulta kysytään, mitä haluaisit tehdä seuraavaksi. -
olet ”astunut”
generate_products
– menetelmäänstep
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. Kirjoitafinish
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 takaisinplace_on_sale
– menetelmään pisteeseen sen jälkeen, kun tulkki on arvioinutgenerated_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), kirjoittamallanext
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ääteltynext
– komennon yhdellä käytöllä. Seuraava suunnistuspäätös on, astutko, seuraava onnew_product.advertise
. -
hylkää Pry-istunto ja jatka ohjelman suoritusta normaalisti komennolla
continue
. Jos tulkki kohtaa toisen siteen.pry-lausuma, (joka tapahtuu, kun soitatplace_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 kirjoittaaexit-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änshow-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. Kirjoitashow-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 arvollaexit "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…