tracer을 이용한 ruby code tracing(코드 흐름 분석)

루비 코드 분석을 하던 중 흐름 추적(?), code tracing을 하기 위해 알아보다가 찾은 라이브러리 공유드립니다.

새로운 툴은 언제나 환영이야! / The world could always use more tool.

tracer 라는 라이브러리고 코드단에서 시작 부분과 끝 부분을 명시해주면 해동 코드 내 동작 순서를 로깅해줍니다.

#> gem install tracer

별도의 명령행으로 지원하지는 않습니다. 그냥 코드에서 직접 삽입해서 테스트하면 됩니다.

require 'tracer'

Tracer.on   #Tracing을 시작할 부분

a = [1,2,3,4,5]
a.each do | number |
  puts number
end

Tracer.off  #off를 만날때까지 Tracing 함

실행해보면.. 실행헀던 코드라인과 코드 내용을 한번에 볼 수 있습니다.

#> ruby test.rb
#0:test.rb:6::-: a = [1,2,3,4,5]
#0:test.rb:7::-: a.each do | number |
#0:test.rb:8::-:   puts number
1
#0:test.rb:8::-:   puts number
2
#0:test.rb:8::-:   puts number
3
#0:test.rb:8::-:   puts number
4
#0:test.rb:8::-:   puts number
5
#0:test.rb:11::-: Tracer.off  #off를 만날때까지 Tracing 함

다른 소스에 Tracer 메소드를 삽입하는 형태로 Command line 툴로 만들어서 써도 괜찮을듯하네요 :) (맨 끝 찾는게 일이려나..)

라이브러리 사용이 있는 경우

라이브러리 사용이 있는 경우엔 라이브러리 내부까지 체크해서 결과를 리턴합니다. 제 코드중 가장 짧은 ftc(https://github.com/hahwul/ftc)에 맨 앞부분과 뒷부분에 넣고 돌려보면 라이브러리 하단까지 잡히는 걸 볼 수 있습니다.

큰 코드 불러오면 난리날듯..