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

  1. magyarázza el, hogy a Pry rugalmasabb REPL, mint az IRB.
  2. telepítse a Pry-t a számítógépére (IDE felhasználók számára már telepítve van).
  3. 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.prybá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.rbnevű fájl jelenik meg.

Utasítás i. Rész

  1. Villa, klón ezt a tárolót.

  2. Telepítse Emelje a számítógépen navigáljon a home könyvtár (cd ~ a terminál), illetve teljesíti gem install pry. (Ezt nem kell tennie, haaz IDE-ben dolgozik.)

  3. 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.