본문에서는 Ruby 디버깅을 위한 다양한 도구와 기법을 포괄적으로 다룹니다. 먼저, Ruby LSP(Language Server Protocol) 확장 프로그램의 활용을 강조합니다. debug.gem
과의 연결을 위해 Ruby LSP
를 사용하는 방법과, launch.json
설정에서 attach
대신 launch
요청을 사용하여 디버깅 프로세스를 간소화하는 방법을 설명합니다. 특히, bin/rails s
와 같은 간단한 설정을 통해 Rails 프로젝트에서 서버를 쉽게 시작하고 디버깅할 수 있음을 보여줍니다. 또한, 효과적인 디버깅 세션을 위해서는 메서드, 클래스, 파일 간의 원활한 탐색이 중요하며, 이를 위해 Ruby LSP
와 같은 에디터 설정을 권장합니다. Ruby LSP
의 코드 렌즈 기능을 활용하여 터미널과 VS Code에서 RSpec 테스트를 쉽게 디버깅할 수 있도록 ruby-lsp-rspec
의 유용성도 언급됩니다.
이어서 debug.gem
의 고급 활용법에 대해 상세히 설명합니다. Gemfile
에서 gem "debug", require: "debug/prelude"
를 사용하여 debug.gem
이 필요할 때만 활성화되도록 설정하는 것이 권장됩니다. 이는 debug.gem
이 로드될 때 즉시 활성화되는 것을 방지하여, 디버깅이 필요 없는 상황에서 불필요한 오버헤드를 줄여줍니다. 또한, CI 환경과 같이 특정 환경에서 debug.gem
의 사용을 방지하기 위해 RUBY_DEBUG_ENABLE
환경 변수를 0으로 설정하는 방법도 제시됩니다. 디버깅 시 특정 젬(예: zeitwerk
, bootsnap
, sorbet-runtime
)을 무시하도록 debug.gem
을 구성하는 방법을 구체적인 코드 예시와 함께 설명하여, 불필요한 스택 트레이스 진입을 방지하고 핵심 코드에 집중할 수 있도록 돕습니다. IRB와의 통합을 통해 디버깅 경험을 개선하는 방법(RUBY_DEBUG_IRB_CONSOLE
또는 DEBUGGER__::CONFIG[:irb_console]
설정)과, step (s)
, next (n)
, continue (c)
등 자주 사용되는 debug.gem
명령어가 Enter 키를 통해 반복 실행될 수 있음을 알려줍니다. 중단점에 도달했을 때 자동으로 명령어를 실행하는 debugger(do: "...")
또는 debugger(pre: "...")
와 같은 유용한 기능도 소개됩니다. 제어 흐름 관련 버그를 디버깅할 때 trace exception
과 catch [exception]
명령의 조합이 효과적이며, 동일한 코드 경로에 여러 중단점을 설정하는 것보다 bt [n]
및 up/down
명령 조합이 더 효율적임을 설명합니다. 더 세밀한 추적을 위해서는 tracer
젬의 사용을 권장하며, debug.gem
이 중단점에서 모든 스레드를 정지시키는 문제가 발생할 경우 binding.irb
를 대안으로 사용하거나, binding.irb
내에서 debug
명령을 통해 debug.gem
을 활성화하는 방법을 제시합니다. 마지막으로, 기본적인 디버깅 개념 학습을 위해 RubyKaigi 2022 강연이 여전히 유용하다고 언급하며 마무리합니다.