From 52b524bab316ce3a66c3618c6bed52825979c609 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Fri, 25 Nov 2022 23:08:31 -0800 Subject: [PATCH 1/2] Fix the debug.gem force-loader for Ruby 3.2 --- lib/irb/cmd/debug.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/irb/cmd/debug.rb b/lib/irb/cmd/debug.rb index 9e2c09610..5f95d3c16 100644 --- a/lib/irb/cmd/debug.rb +++ b/lib/irb/cmd/debug.rb @@ -82,14 +82,22 @@ def DEBUGGER__.capture_frames(*args) # it's a bundled gem. This method tries to activate and load that. def load_bundled_debug_gem # Discover latest debug.gem under GEM_PATH - debug_gem = Gem.paths.path.map { |path| Dir.glob("#{path}/gems/debug-*") }.flatten.select do |path| + debug_gem = Gem.paths.path.flat_map { |path| Dir.glob("#{path}/gems/debug-*") }.select do |path| File.basename(path).match?(/\Adebug-\d+\.\d+\.\d+\z/) end.sort_by do |path| Gem::Version.new(File.basename(path).delete_prefix('debug-')) end.last return false unless debug_gem + # Discover debug/debug.so under extensions for Ruby 3.2+ + debug_so = Gem.paths.path.flat_map do |path| + Dir.glob("#{path}/extensions/**/#{File.basename(debug_gem)}/debug/debug.so") + end.first + # Attempt to forcibly load the bundled gem + if debug_so + $LOAD_PATH << debug_so.delete_suffix('/debug/debug.so') + end $LOAD_PATH << "#{debug_gem}/lib" begin require "debug/session" From ff3f1ffae1542d7da123e64ca229231d64e26e7f Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Fri, 25 Nov 2022 23:22:23 -0800 Subject: [PATCH 2/2] Support 1.7.0dev format as well --- lib/irb/cmd/debug.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/irb/cmd/debug.rb b/lib/irb/cmd/debug.rb index 5f95d3c16..2c09c99cf 100644 --- a/lib/irb/cmd/debug.rb +++ b/lib/irb/cmd/debug.rb @@ -83,7 +83,7 @@ def DEBUGGER__.capture_frames(*args) def load_bundled_debug_gem # Discover latest debug.gem under GEM_PATH debug_gem = Gem.paths.path.flat_map { |path| Dir.glob("#{path}/gems/debug-*") }.select do |path| - File.basename(path).match?(/\Adebug-\d+\.\d+\.\d+\z/) + File.basename(path).match?(/\Adebug-\d+\.\d+\.\d+(\w+)?\z/) end.sort_by do |path| Gem::Version.new(File.basename(path).delete_prefix('debug-')) end.last