remote debugger failing on first hit with puma

Open
#1,121 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
docker, ruby
Domain
devtools

Research direction

Start by reproducing the first-hit failure with Ruby 3.3.5, rdbg 1.9.2, Puma in a local Docker container, and the Sinatra request flow described. Inspect the remote debugger behavior around the initial SIGURG and step transition, including the reported Puma and Rack paths. Done means the first breakpoint can be stepped through normally without losing context.

Written by the indexing model from the issue text.

Description

Your environment

  • ruby -v: 3.3.5
  • rdbg -v: 1.9.2

Describe the bug
When hitting breakpoint via placing "debugger" into source code, and connecting with remote debugger, with sinatra controller and puma web server in local docker container, first time when "debugger" is hit will fail, as described below

For example,
Puma started freshly serving sinatra app in local docker container

    33|       def some_method_called_via_puma_via_sinatra_controller
=>  34|         debugger
    35|         some logic...
    37|       end
    38|
(rdbg:remote) n
# No sourcefile available for /usr/local/bundle/gems/puma-6.4.2/lib/puma/single.rb

Stop by SIGURG
(rdbg:remote) n
# it looks like it tries to step in code, but in reality context is lost
(rdbg:remote) n
[1, 7] in $(Gem)/rack-2.2.9/lib/rack/file.rb
     1| # frozen_string_literal: true
     2|
     3| require_relative 'files'
     4|
=>   5| module Rack
     6|   File = Files
     7| end
(rdbg:remote) c

Thus only way to end to proceed is to hit "continue", since control flow has jumped into some odd place, and now, after this failure when doing same request again, debugger works as espected (i.e. does not hit this "SIGURG" which seems to break thing).

Makes usage rather irritating since after every modify of code (and restart of web server thus), have to first hit debugger "cold", and failing, and hitting continue, and now it seems to be "hot", and can actually succeed.

To Reproduce

  • Local docker container
  • running sinatra app with puma on it
  • setting up remote debugger
  • adding breakpoint via placing "debugger" into code
  • launching app on container
  • performing some request hitting "debugger" put in code
  • connect remote debugger to process
    => fails on first time, if hitting continue, and retrying request it works as expected

Expected behavior
It would not fail on first time, since it makes debugging few cases difficult.

Additional context
Issue has been there for a while, i.e. it has had this failure always for me with this debug gem

Dominant language
Ruby
Stars
1.3k
Forks
146
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from ruby/debug

All issues in ruby/debug

Similar issues

More Ruby issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.