From 40ca4786644e70ab2ae8cf8f8cab71380c9f0562 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Tue, 5 Jul 2022 17:00:30 +0900 Subject: [PATCH] restore modified `RUBYOPT` by `rdbg` `rdbg` adds `-r debug/(start_method)` to tell the launched ruby process needs require it. However, this option affect child process. This patch restore the `RUBYOPT` if needed. fix #663 --- exe/rdbg | 4 +++- lib/debug/session.rb | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/exe/rdbg b/exe/rdbg index 1cddfd1f2..6f90842e0 100755 --- a/exe/rdbg +++ b/exe/rdbg @@ -14,7 +14,9 @@ when :start cmd = config[:command] ? ARGV.shift : (ENV['RUBY'] || RbConfig.ruby) env = ::DEBUGGER__::Config.config_to_env_hash(config) - env['RUBYOPT'] = "-r #{libpath}/#{start_mode}" + rubyopt = env['RUBYOPT'] + env['RUBY_DEBUG_ADDED_RUBYOPT'] = added = "-r #{libpath}/#{start_mode}" + env['RUBYOPT'] = "#{added} #{rubyopt}" exec(env, cmd, *ARGV) diff --git a/lib/debug/session.rb b/lib/debug/session.rb index db29bd1e6..41c10d9ec 100644 --- a/lib/debug/session.rb +++ b/lib/debug/session.rb @@ -19,6 +19,14 @@ return end +# restore RUBYOPT +if (added_opt = ENV['RUBY_DEBUG_ADDED_RUBYOPT']) && + (rubyopt = ENV['RUBYOPT']) && + rubyopt.start_with?(added_opt) + ENV['RUBYOPT'] = rubyopt.delete_prefix(rubyopt) + ENV['RUBY_DEBUG_ADDED_RUBYOPT'] = nil +end + require_relative 'frame_info' require_relative 'config' require_relative 'thread_client'