본문에서는 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 강연이 여전히 유용하다고 언급하며 마무리합니다.