Debugging with Pry

Merhaba! Kod yazarken bir bir şeylerin yolunda gitmediği veya kod içinde neler olduğunu anlamak istediğimiz anlar oluyor. Bu gibi durumlarda debugging yapıyoruz.

Ruby’de eğer IDE kullanıyorsunuz debugging yapmak bir nebze kolay olabiliyor. Ancak benim gibi Sublime vb bir text editör kullanıcısıysanız imdadımıza PRY yetişiyor.

Pry nedir? Pry, aslında IRB yani Interactive Ruby Shell alternatif olarak çıkmış bir runtime developer console’dur. Kendisi bir RubyGem’i olup, bilgisayarınıza kurmanızla IRB’nin bazı zamanlarda yeterli olmadığı bir çok özelliği size sunar. Ancak bugünün konusu PRY’dan çok PRY ile nasıl debugging yapılır o olacak.

Her şeyden önce PRY ile debugging yapabilmek için PRY RubyGem’nin makinemizinde kurulu olması gerekiyor.

> gem install pry

Sonrasında ise artık kodumuzda hangi noktada durmasını istiyorsak oraya binding.pry komutu yazıyoruz. Örneğin,

# person.rb
require 'pry'

class Person
  def say_hello(name)
    binding.pry
    puts "Hello #{name}"
  end
end

p = Person.new
puts p.say_hello("ender")

şeklinde bir Ruby kodu yazıyoruz ve konsoldan kodu çalıştırdığımızda ise

> ruby person.rb
    4: def say_hello(name)
 => 5:   binding.pry
    6:   puts "Hello #{name}"
    7: end

şeklinde bir çıktı alıyoruz. Bu anda artık name değişkenini çağırabilir ve içinde ne olduğunu görebiliriz.

[1] pry(#<Person>)> name
=> "ender"

Sonrasında ise exit diyerek PRY’ı kapatıyoruz.

Debugging yaparken kod içinde ileri gitmek, bir metotudun içine girmek ya da onu atlamak isteyebiliriz. PRY kendi hali ile buna cevap vermiyor. Ancak pry-debugger gem’i ile bunu da halledebiliyoruz.

> gem install pry-debugger

Yukardaki örnek üzerinden devam edecek olursak,

require 'pry'

class Person
  def say_hello(name)
    binding.pry
    puts "Hello #{name}" # Execution will stop here.
    puts "Age: " # Run 'step' or 'next' in the console to move here.
    ask_age(name)
  end

  def ask_age(name)
    puts "How old are you? #{name}.capitalize"
  end
end

p = Person.new
puts p.say_hello("ender")

next komudu ile kodun durduğu yer bir alt satıra inebiliriz. Pry-debugger gem’i bize step, finish ve continue gibi fonksiyonlar da sağlamaktadır. Daha fazla bilgiye Github’daki Readme’den ulaşabilirsiniz.

Sevgiler.

[ ruby  ]