[ruby] 디버그(debug) 쉽게 하기
ruby 2.1.0를 사용중이며, debug(디버그)를 위해 pry와 pry-nav를 설치한다.
$ gem install pry
$ gem install pry-nav
ruby 테스트 코드 작성
$ cat Point.rb
require 'pry'
class Point
attr_accessor :x, :y
attr_reader :zzz
def say_hello
puts "Hello World"
end
end
def another_hello
puts "Hello World (from a method)"
end
p = Point.new
p.say_hello
p.x = 10
binding.pry
puts p.x
another_hello
소스 중에 break하고 싶은 곳을 'binding.pry'을 입력하고 실행하면, 디버그콘솔화면이 나온다. 간단하게 테스를 할 수 있다.
$ ruby Point.rb
Hello World
From: /mydev/test/ruby/Point.rb @ line 18 :
13: end
14:
15: p = Point.new
16: p.say_hello
17: p.x = 10
=> 18: binding.pry
19: puts p.x
20: p.zzz = 20
21: another_hello
[1] pry(main)> puts p.x
10
=> nil
[2] pry(main)> puts p.y
=> nil
[5] pry(main)> def plus(a, b)
[5] pry(main)* return a + b
[5] pry(main)* end
=> :plus
[6] pry(main)> p.y = 0
=> 0
[7] pry(main)> plus(p.x, p.y)
=> 10
[8] pry(main)> exit
디버그 에서 하듯이 setp/next/continue/exit를 할 수 있다.
Samuel /mydev/test/ruby $ ruby Point.rb
Hello World
From: /mydev/test/ruby/Point.rb @ line 18 :
13: end
14:
15: p = Point.new
16: p.say_hello
17: p.x = 10
=> 18: binding.pry
19: puts p.x
20: another_hello
[1] pry(main)> next
From: /mydev/test/ruby/Point.rb @ line 19 :
14:
15: p = Point.new
16: p.say_hello
17: p.x = 10
18: binding.pry
=> 19: puts p.x
20: another_hello
주로 사용하는 ruby 명령어는 다음과 같다.
- next : 다음 한 단계 진행
- step : 다음 한 단계 진행 또는 메소드 진입
- continue : 다음 binding.pry 까지 진행 또는 binding.pry 없으면 코드 끝까지 실행
- quit, exit : 모든 코드 실행후 종료
- !!! : 바로 종료
- help : 도움말
기타
- watch 테스트
[1] pry(main)> watch p
Watching p
watch: p => #<Point:0x007ffa1580fb80 @x=10>