Hibakeresés a Pry
áttekintés
fogjuk fedezni Pry, egyfajta REPL, és megvitatják, hogyan kell telepíteni és használni, hogy debuga programot.
célok
- magyarázza el, hogy a Pry rugalmasabb REPL, mint az IRB.
- telepítse a Pry-t a számítógépére (IDE felhasználók számára már telepítve van).
- Program hibakeresése kötéssel.feszítse be a fájl törzsébe.
mi az a REPL?
az IRB (Interactive Ruby) használatával már bemutatták a REPLs-t.A REPL jelentése Olvasás, Értékelés, nyomtatás, hurok. Ez egy interaktív programozási környezet, amely veszi a felhasználó bemenetét, kiértékeli és visszaadja az eredményt a felhasználónak.
Ruby telepíti a saját REPL, amely IRB, hogy már használ.Minden alkalommal, amikor beírja a irb
– ot a terminálba, egy REPL-be lép.
Mi Az A Pry?
a Pry egy másik Ruby REPL, néhány hozzáadott funkcióval. Amikor belép az IRB-be, akkoregy teljesen új interaktív környezetbe lép. Az IRB-n belül lejátszani kívánt kódot IRB-be kell írni, vagy IRB-be kell másolni. Pry, másrészről, olyan, mint egy REPL, amelyet beadhat a programjába.
a Pry sokkal rugalmasabb, mint az IRB. Ha telepíti a Feszítse könyvtár (via a Prygem—majd séta a telepítés egy kicsit), akkor használja a binding.pry
bárhol a kódot.
Várj… Milyen “kötelező”?
Kötelező beépített ruby osztályban, akinek a tárgyak is magukba az összefüggésben a te jelenlegi hatálya (változók, módszerek stb.), és ezeket a kontextuson kívüli használatra megtartják.
a binding.pry
hívása lényegében ‘kíváncsiskodik’ a kód aktuális kötési vagy szövegszövegébe, a fájlon kívülről.
tehát amikor a binding.pry
sort a kódba helyezi, ez a sor futásidőben értelmezhető lesz (a program végrehajtásakor). Amikor az interpreter eltalálja ezt a sort, a program valóban lefagy, és a terminál egy olyan REPL-vé válik, amely a program közepén található, bárhol hozzáadta abinding.pry
Sort.
vessünk egy pillantást. Ebben a tárolóban egypry_is_awesome.rb
nevű fájl jelenik meg.
Utasítás i. Rész
-
Villa, klón ezt a tárolót.
-
Telepítse Emelje a számítógépen navigáljon a home könyvtár (
cd ~
a terminál), illetve teljesítigem install pry
. (Ezt nem kell tennie, haaz IDE-ben dolgozik.) -
Nézd meg a kódot
lib/pry_is_awesome.rb
látnod kellene, a következő kódot:
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
Itt vagyunk igénylő pry
, amit meg kell tennie, hogy használja emelje, meghatározó módszer,majd hív ez a módszer.
a repo könyvtárában, a terminálon futtassa a fájlt a rubylib/pry_is_awesome.rb
beírásával. Most nézze meg a terminálját. Látnod kellene valami ilyesmit:
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)>
lefagyasztotta a programot, ahogy végrehajtja, és most egy REPL belsejében van. Lényegében megállítottad az időt! Hát nem király?
a terminálba, a pry konzolba írja be a inside_the_method
változó nevét, majd nyomja meg az enter billentyűt. Meg kell jelennie a visszatérési értéke "We're inside the method"
meg tudja vizsgálni az adatokat belül a módszer, amelyben már elhelyezett yourbinding.
most a terminálba, a pry konzolba írja be athis_variable_hasnt_been_interpreted_yet
változó nevét. A visszatérési értéknil
. Ez azért van, mert a 7-es vonalon elhelyezett kötés valójában befagyasztotta a programot a 7-es vonalon, és az imént hívott változót még nem értelmezték.Következésképpen a REPL nem tud róla.
most a terminálba írja be a exit
parancsot, és elhagyja a pry konzolt, és a program továbbra is végrehajtásra kerül.
utasítások II. rész: a Pry használata a
hibakereséshez a Pry belsejében lévő kód feltárása mellett a változókat is kezelhetiés próbálja ki a kódot. Ez az, ahol a Pry valóban hasznos lesz a hibakereséshez. Ha van olyan módszered, amely nem azt teszi, amit kellene, ahelyett, hogy megváltoztatná a szövegszerkesztőt, és újra és újra futtatná a teszteket, amíg meg nem működik, beilleszthet egy kötést a kódjába, és kipróbálhatja a dolgokat. Miután kitalálta, hogyan lehet megoldani a problémát, frissíti a kódot a szövegszerkesztőben.
nézzünk át egy példát együtt. Ebben az adattárban, amit forkedand klónozott le a számítógépre, akkor megjelenik egy spec
mappát tartalmazó fájlpry_debugging_spec.rb
. Ez a lib/pry_debugging.rb
fájl tesztje.
pry_debugging.rb
– ban van egy törött módszer. Fuss learn test
, hogy thefailing teszt. A következőket kell látnia:
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)>'
szóval mi történik? A második sorban (aFailure/Error
– vel kezdődő sor) láthatjuk, hogy a teszt a plus_two
metódust hívja meg ésáthalad 3
argumentumként. Az alábbiakban láthatjuk, hogy a teszt5
visszatérését várja, de a 3
visszatér. Emlékszünk arra, hogy a Ruby-ban egy módszer visszatérési értéke általában a módszer utolsó sorának értéke, ebben az esetben num
:
def plus_two(num) num + 2 numend
tehát míg a módszerünk 2-t ad hozzá a num
– hoz a második sorban, úgy tűnik, hogy nem frissül num
. Van Pry szükséges a tetején a spec/pry_debugging_spec.rb
fájlt, így tudjuk használni, hogy ellenőrizze ezt. Tegyünk egybinding.pry
kódot a kódunkba, közvetlenül a sor után:
def plus_two(num) num + 2 binding.pry numend
most futtassa újra a tesztcsomagot, és dobja be a kíváncsiskodó konzolt. A terminálnak így kell kinéznie:
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>)>
ellenőrizzük az aktuális visszatérési értéket a num
beírásával a Pry prompt. Valami ilyesmit kell látnod:
pry(#<RSpec::ExampleGroups::PlusTwo>)> num=> 3 pry(#<RSpec::ExampleGroups::PlusTwo>)>
a pry konzolon belüli változó értékének ellenőrzésével megerősíthetjük, hogy a num
továbbra is egyenlő 3
– vel, ennek eredményeként a módszer visszatér 3
.
hogyan módosíthatjuk a kódot a 2. sorban úgy, hogy a módszer a várt módon viselkedjen? Frissítenünk kell a num
változónk értékét úgy, hogy egyenlő legyen önmagának és 2-nek az összegével. Játssz a Pry konzolon belül: próbáld ki azt a kódot, amelyet a youthink szükség szerint frissíti a num
értéket, majd ellenőrizd a num
értékét, hogy működött-e. Miután kitalálta, beírhatja a exit
parancsot a terminálba, hogy kilépjen a Pry-ből, frissítse a kódot a szövegszerkesztőben, és futtassa újra a tesztet, hogy ellenőrizze, hogy átmegy-e. Ügyeljen arra, hogy távolítsa el a binding.pry
!
eltarthat egy ideig, amíg megszokja a Pry használatát, ezért ne aggódjon, ha még mindig kissé zavaró. Ahogy elkezd dolgozni bonyolultabb módszerekkel ésadatszerkezetek, megtalálja, hogy lehet egy nagyon hasznos eszköz.