debugger? byebug?
루비의 내장 디버거인 debugger는 루비 1.9.x까지만 지원된다. 루비 2.0 부터는 새로운 디버거인 byebug가 기본적으로 내장되어 있다.
설치
gem install byebug 또는 vi Gemfile
gem 'byebug'
사용법
루비 파일의 디버깅 포인트에서 byebug를 호출하기만 하면 된다. byebug는 호출된 위치에서의 컨텍스트를 콘솔을 통해 접근할 수 있게 한다. 레일즈의 경우 콘트롤러, 뷰, 모델, 헬퍼 등 모든 루비(.rb 또는 .erb) 파일에서 사용할 수 있다. 심지어는 routes.rb 에서도 동작한다. 일단 byebug 세션이 열리면 byebug 내부 명령을 사용할 수 있는데 몇가지 기본적인 명령어를 소개하면 다음과 같다.
# 명령어 용도
1 p <var> 개별 변수 출력
2 display <var> watchlist(=tracing list) 추가하기. undisplay로 해제
3 step 1단계씩 프로그램 실행 (메소드를 만나면 내부로 진입)
4 next 1라인씩 프로그램 실행
5 continue 연속적으로 프로그램 실행
byebug에서 pry 사용하기
byebug를 통해서도 기본적인 REPL 환경을 사용할 수 있긴한데 이 부분에 있어서의 갑은 역시 pry이다. byebug에서 pry의 기능을 사용하려면 pry-byebug가 필요하다. Gemfile에 다음을 지정한다.
gem 'pry-byebug'
bundle install 에 의해 pry-byebug와 pry가 함께 설치된다. 이제 byebug 프롬프트에서 pry 라고 입력하면 현재 컨텍스에 바인딩된 pry 환경이 제공된다.
(byebug) pry
[1] pry(#<Blog>)>
아래에서는 몇가지 유용한 pry 명령어 사례들이다.
# 명령 예제 설명
1 cd Blog Blog 모델로 이동. self는 Blog class
2 ls 현 binding(=Blog 모델)에 가용한 methods 리스트
3 cd first Blog.first로 이동. self는 Blog.first instance
4 title title getter 메소드 수행
5 cd title title(=이 경우에는 String instance)로 이동
6 upcase String instance 메소드인 upcase 수행
7 ls Array -M Array 모델로 컨텍스트 전환해서 ls -M(=모듈 메소드 보기) 실행
8 show-doc Array#in_groups_of Array의 instance 메소드인 in_groups_of 문서 보기 실행
9 show-method Array#in_groups_of Array의 instance 메소드인 in_groups_of 실행 코드 보기
10 edit Array#in_groups_of Array의 instance 메소드인 in_groups_of 코드 에디팅
11 .ls 쉘 명령어 ls 수행
젬(gem) 열기
디버깅을 하다보면 필연적으로 써드파티 젬들을 열어볼 경우가 생긴다. 이때 bundle open <gem> 또는 gem open <gem> 명령을 사용하면 해당 젬을 에디터에서 열어 볼 수 있다. 한편 이와같이 오픈된 써드파티 젬에 대해 몽키패치를 하다보면 어느 순간에 해당 젬을 원래 설치된 상태로 돌릴 필요가 생기기도 한다. 이때는 gem pristine <gem> 명령을 사용한다.