Open suketa opened 2 years ago
I'm not sure how the rake test
invokes the test process, but I think the following scenario.
(1) Running rake
with debugg port == 12345
(2) Create another process for the test (test worker) and tries to open the debug port 12345, but it's already opened at (1).
6966 pts/0 S+ 0:00 ruby /home/ko1/.rbenv/versions/2.7.3/bin/rake test
6994 pts/0 S+ 0:00 sh -c /home/ko1/.rbenv/versions/2.7.3/bin/ruby -w -I"lib" /home/ko1/.rbenv/versions/2.7.3/lib/ruby/gems/2.7.0/gems/rake-13.0.6/lib/rake/rake_test_loader.rb "test_example.rb"
6995 pts/0 Sl+ 0:00 /home/ko1/.rbenv/versions/2.7.3/bin/ruby -w -Ilib /home/ko1/.rbenv/versions/2.7.3/lib/ruby/gems/2.7.0/gems/rake-13.0.6/lib/rake/rake_test_loader.rb test_example.rb
On my environment the ps
log shows 2 ruby processes are created and confirms (2).
Now I have no idea how to solve it... Hmm.
Two possible solutions:
(1) use port 0. It assigns free port randomly. (2) Disable debugger at the beginning of Rakefile (not implemented yet).
It is big change but
(3) introduce remote proxy server for remote debuggees
It seems orthodox method, but it needs a time.
Now I don't have a good solution on it.
Think I found a similar problem. See: https://github.com/connorshea/vscode-ruby-test-adapter/issues/92#issuecomment-1191477785
Wow rdbg is used by another project ;p
I think using a port range for the debugger to try can be a good compromise. For example a port range can be reliably open on a container. I'd leave the task of deciding which debuggee is which to the user, it can be relative easily done based on the internal state of the debuggees.
Your environment
ruby -v
: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]rdbg -v
: rdbg 1.3.4Describe the bug remote debugging with
rake test
raisesErrno::EADDRINUSE
To Reproduce Rakefile:
test_example.rb:
And run in console:
And connect from another console and type
c
:Then
Errno::EADDRINUSE
was raised in server console.Expected behavior
Not raise Errno::EADDRINUSE and debugger stops at binding.break line in test_example.rb.