Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Interrupt rescuing causes issues with debugger #581

Draft
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

notEthan
Copy link

@notEthan notEthan commented Jul 8, 2024

The way Rake rescues exceptions running a task, I think, rescues too much. The problem I encounter is when I am using debug in a test task that runs in a subprocess (via Kernal#system) - raising an Interrupt with ctrl+c leaves the terminal in a state where it no longer echoes input.

To reproduce, with the debug gem installed and this Rakefile:

task(:default) { system("ruby -r debug -e debugger") }

Run rake; at the debug prompt hit ctrl+c. Your terminal no longer echoes your input; the tty is left in raw mode (I eventually found you can fix this by running stty -raw)

I think the solution to this is what RSpec does, rescuing broadly but with some exceptions to the Exceptions - see https://github.com/rspec/rspec-support/blob/v3.13.0/lib/rspec/support.rb#L145-L153

I've copied that in this PR and replaced every rescue Exception in lib/, though only lib/rake/application.rb affects my usage, I think it should be correct in the others as well.

@@ -21,7 +21,17 @@
# IN THE SOFTWARE.
#++

module Rake; end
module Rake
module AllExceptionsExceptOnesWeMustNotRescue
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't sure where would be a good place for this, just put it here for a draft PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

1 participant