[ruby/irb] Load history when starting a direct debug session

(https://github.com/ruby/irb/pull/1046)

* Load history when starting a direct debug session

When starting a debug session directly with RUBY_DEBUG_IRB_CONSOLE=1 and
`require 'debug'; debugger`, IRB's history wasn't loaded. This commit ensures
history is loaded in this case by calling `load_history` when configuring IRB
for the debugger.

Fixes ruby/irb#975

* Update test/irb/test_history.rb

* Update lib/irb/debug.rb

---------

https://github.com/ruby/irb/commit/7f851b5353

Co-authored-by: Stan Lo <stan001212@gmail.com>
This commit is contained in:
James Reid-Smith 2024-12-12 12:26:03 -05:00 committed by git
parent 300be2b192
commit c0caf1cc1a
2 changed files with 31 additions and 0 deletions

View File

@ -81,6 +81,7 @@ module IRB
IRB.instance_variable_set(:@debugger_irb, irb)
irb.context.with_debugger = true
irb.context.irb_name += ":rdbg"
irb.context.io.load_history if irb.context.io.class < HistorySavingAbility
end
module SkipPathHelperForIRB

View File

@ -488,6 +488,36 @@ module TestIRB
HISTORY
end
def test_direct_debug_session_loads_history
@envs['RUBY_DEBUG_IRB_CONSOLE'] = "1"
write_history <<~HISTORY
old_history_1
old_history_2
old_history_3
HISTORY
write_ruby <<~'RUBY'
require 'debug'
debugger
binding.irb # needed to satisfy run_ruby_file
RUBY
output = run_ruby_file do
type "history"
type "puts 'foo'"
type "history"
type "exit!"
end
assert_include(output, "irb:rdbg(main):002") # assert that we're in an irb:rdbg session
assert_include(output, "5: history")
assert_include(output, "4: puts 'foo'")
assert_include(output, "3: history")
assert_include(output, "2: old_history_3")
assert_include(output, "1: old_history_2")
assert_include(output, "0: old_history_1")
end
private
def write_history(history)