Vianetsintä Pry: llä

yleiskatsaus

käsittelemme Pry: tä, eräänlaista REPL: ää, ja keskustelemme siitä, miten se asennetaan ja käytetään debuga-ohjelmaan.

tavoitteet

  1. selittävät, miten Pry on joustavampi REPL kuin IRB.
  2. Asenna Pry tietokoneellesi (jo asennettu IDE-käyttäjille).
  3. Debug ohjelma sitomalla.urki kansiosi sisältä.

mikä on REPL?

olet jo tutustunut Repleihin käyttämällä IRB: tä (Interactive Ruby).REPL tulee sanoista Read, Evaluate, Print, Loop. Se on interaktiivinen ohjelmointiympäristö, joka ottaa käyttäjän syötteen, arvioi sen ja palauttaa tuloksen käyttäjälle.

Ruby asentaa oman REPL: n, joka on IRB, jota olet jo käyttänyt.Joka kerta, kun kirjoitat irb päätteeseesi, siirryt toistoon.

Mitä Pry On?

Pry on toinen Rubiinikappale, johon on lisätty joitakin toimintoja. Kun kirjoitat IRB, olet siirtymässä upouusi interaktiivinen ympäristö. Mikä tahansa koodi, jonka haluat pelata IRB: ssä, sinun täytyy kirjoittaa IRB: llä tai kopioida ja liittää IRB: hen. Pry taas on kuin REPL, jonka voit pistää ohjelmaasi.

Pry on huomattavasti joustavampi kuin IRB. Kun olet asentanut Pry-kirjaston (prygemin kautta-käymme asennuksen läpi hieman), voit käyttää binding.pry– koodia missä tahansa koodissasi.

odota… Mikä on ”sitovaa”?

sidonta on sisäänrakennettu rubiiniluokka, jonka objektit voivat kiteyttää nykyisen soveltamisalasi kontekstin (muuttujat, menetelmät jne.), ja säilyttää ne käytettäviksi tämän asiayhteyden ulkopuolella.

soittaminen binding.pry on oleellisesti ”urkkimista” koodin nykyiseen sitovuuteen tai tekstiin tiedostosi ulkopuolelta.

joten kun asetat rivin binding.pry koodiisi, kyseinen rivi tulkitaan suorituksen aikana (kun ohjelmasi suoritetaan). Kun tulkki osuu tähän riviin, ohjelmasi itse asiassa jäätyy ja päätteesi muuttuu suoraan ohjelmasi keskellä olevaan riviin, missä tahansa olet lisännytbinding.pry – rivin.

Katsotaanpa. Tässä arkistossa näet tiedostonpry_is_awesome.rb.

ohjeet Osa I

  1. haarukoi ja kloonaa tämä arkisto.

  2. Asenna Pry tietokoneellesi navigoimalla kotihakemistoosi (cd ~ päätelaitteessasi)ja suorita gem install pry. (Sinun ei tarvitse tehdä tätä, jos olet töissä IDE.)

  3. Katso koodia lib/pry_is_awesome.rb

sinun pitäisi nähdä seuraava koodi:

require 'pry'def prying_into_the_method inside_the_method = "We're inside the method" puts inside_the_method puts "We're about to stop because of pry!" binding.pry this_variable_hasnt_been_interpreted_yet = "The program froze before it could read me!" puts this_variable_hasnt_been_interpreted_yetendprying_into_the_method

tässä vaaditaan pry, mikä pitää tehdä, jotta voi käyttää pry: tä,määritellä metodin ja sitten kutsua sitä metodia.

tämän repon hakemistossa, päätteessäsi, suorita tiedosto kirjoittamalla rubylib/pry_is_awesome.rb. Katso päättettäsi. Sinun pitäisi nähdä jotain tällaista.:

 3: def prying_into_the_method 4: inside_the_method = "We're inside the method" 5: puts inside_the_method 6: puts "We're about to stop because of pry!" 7: binding.pry => 8: this_variable_hasnt_been_interpreted_yet = "The program froze before it could read me!" 9: puts this_variable_hasnt_been_interpreted_yet 10: end pry(main)>

olet jäädyttänyt ohjelmasi, kun se suorittaa ja olet nyt sisällä REPL insidey your program. Pysäytit juuri ajan! Eikö olekin siistiä?

Kirjoita päätteeseen pry-konsoliin muuttujan nimi inside_the_methodja paina enter. Sinun pitäisi nähdä palautusarvo "We're inside the method"

voit tutkia tietoja menetelmän sisällä, johon olet sijoittanut sidontasi.

kirjoita nyt päätteeseen, pry-konsoliin muuttujan nimithis_variable_hasnt_been_interpreted_yet. Palautusarvo onnil. Koska sidos, jonka laitoit riville 7, jäädytti ohjelman rivillä 7, – ja muuttujaa, jolle juuri soitit, ei ole vielä tulkittu.Näin ollen meidän edustaja ei tiedä siitä.

kirjoita nyt päätteeseen exit, niin jätät pry-konsolin ja ohjelma jatkaa suoritusta.

Instructions Part II: käyttämällä Pry: tä vianetsintään

sen lisäksi, että voit tutkia koodia Pry: n sisällä, voit myös manipuloida variables and try code out. Tässä Pry todella tulee hyödyllinen virheenkorjaus. Jos sinulla on menetelmä, joka ei tee sitä, mitä sen pitäisi tehdä, sen sijaan, että teet muutoksia tekstieditorissasi ja suoritat testejä yhä uudelleen, kunnes saat sen toimimaan, voit laittaa sitovan koodin ja kokeilla asioita. Kun olet saanut selville, miten korjata ongelman, päivität koodin tekstimuokkauksessasi.

kävellään yhdessä esimerkin läpi. Tässä arkistossa, jonka olet koonnut ja kloonannut tietokoneellesi, näet spec – kansion, joka sisältää tiedostonpry_debugging_spec.rb. Tämä on testi tiedostolle lib/pry_debugging.rb.

pry_debugging.rb meillä on rikki menetelmä. Juokse learn test nähdäksesi pettämistestin. Sinun pitäisi nähdä seuraavat:

 1) #plus_two takes in a number as an argument and returns the sum of that number and 2 Failure/Error: expect(plus_two(3)).to eq(5) expected: 5 got: 3 (compared using ==) # ./spec/pry_debugging_spec.rb:6:in `block (2 levels) in <top (required)>'

mitä tapahtuu? Toisella rivillä (Failure/Error alkavalla rivillä) voidaan todeta, että kokeessa kutsutaan argumentiksi plus_two – menetelmää ja 3 – menetelmää. Alla näkyy, että testi odottaa5 palautusta, mutta että 3 sen sijaan palautetaan. Muistamme, että rubiinissa metodin arvo on yleensä themethodin viimeisen rivin arvo, tässä tapauksessa num:

def plus_two(num) num + 2 numend

joten vaikka meidän menetelmämme on lisätä 2 num toiselle riville, näyttää siltä, että se ei päivitä num. spec/pry_debugging_spec.rb – tiedostomme yläosassa tarvitaan urkintaa, joten voimme käyttää sitä tämän tarkistamiseen. Merkitään koodiimmebinding.pry heti tuon rivin jälkeen:

def plus_two(num) num + 2 binding.pry numend

nyt, suorita testi suite uudelleen ja pudota Pry konsoli. Terminaalisi pitäisi näyttää tältä.:

From: /Users/sophiedebenedetto/Desktop/Dev/Ruby-Methods_and_Variables/pry-readme/lib/pry_debugging.rb @ line 4 Object#plus_two: 1: def plus_two(num) 2: num + 2 3: binding.pry => 4: num 5: end pry(#<RSpec::ExampleGroups::PlusTwo>)>

tarkistetaan nykyinen palautusarvo kirjoittamalla num Pry-kehotteeseen. Sinun pitäisi nähdä jotain tällaista.:

 pry(#<RSpec::ExampleGroups::PlusTwo>)> num=> 3 pry(#<RSpec::ExampleGroups::PlusTwo>)>

tarkistamalla pry-konsolin sisällä olevan muuttujan arvon voimme varmistaa, että num on edelleen sama kuin 3 ja tämän seurauksena menetelmä on palaamassa 3.

miten voimme muuttaa koodia rivillä 2 niin, että menetelmä käyttäytyy odotetulla tavalla? Meidän on päivitettävä num muuttujan arvo niin, että se on yhtä suuri kuin itsensä summa ja 2. Pelaa Pry-konsolin sisällä: kokeile koodia, jonka youthink päivittää num tarpeen mukaan ja tarkista sitten arvon num toimivuus. Kun olet selvittänyt sen, voit kirjoittaa exit päätelaitteeseesi päästäksesi pois urkinnasta, päivittää koodin tekstieditorissasi ja suorittaa testin uudelleen varmistaaksesi sen syötön. Muista poistaa binding.pry!

Pryn käyttäminen voi kestää jonkin aikaa, joten älä huoli, jos se on vielä hieman hämmentävää. Kun alat työskennellä monimutkaisempia menetelmiä jatietorakenteita, huomaat, että se voi olla erittäin hyödyllinen työkalu.