Skip to content

Commit 6def10a

Browse files
committed
fix break line check algorithm
If specify the break line on the method definition, it stops at the beggining of method at called time (don't stop at method definition timing). The line check algorithm has a bug and this patch fix it.
1 parent 64dae96 commit 6def10a

File tree

2 files changed

+89
-7
lines changed

2 files changed

+89
-7
lines changed

lib/debug/breakpoint.rb

+4-7
Original file line numberDiff line numberDiff line change
@@ -273,13 +273,10 @@ def try_activate root_iseq = nil
273273

274274
if !nearest || ((line - nline).abs < (line - nearest.line).abs)
275275
nearest = NearestISeq.new(iseq, nline, events)
276-
else
277-
if @hook_call && nearest.iseq.first_lineno <= iseq.first_lineno
278-
if (nearest.line > line && !nearest.events.include?(:RUBY_EVENT_CALL)) ||
279-
(events.include?(:RUBY_EVENT_CALL))
280-
nearest = NearestISeq.new(iseq, nline, events)
281-
end
282-
end
276+
elsif @hook_call &&
277+
nearest.line == iseq.first_line &&
278+
events.include?(:RUBY_EVENT_CALL)
279+
nearest = NearestISeq.new(iseq, nline, events)
283280
end
284281
end
285282
end

test/console/break_test.rb

+85
Original file line numberDiff line numberDiff line change
@@ -838,4 +838,89 @@ def test_break_on_realoded_file
838838
end
839839
end
840840
end
841+
842+
class BreakAtLineTest < ConsoleTestCase
843+
def program path
844+
<<~RUBY
845+
1| load #{path.dump}
846+
RUBY
847+
end
848+
849+
def extra_file
850+
<<~RUBY
851+
a = 1
852+
853+
class C
854+
def m
855+
p :m
856+
end
857+
end
858+
RUBY
859+
end
860+
861+
def test_break_on_line
862+
with_extra_tempfile do |extra_file|
863+
debug_code program(extra_file.path) do
864+
type "break #{extra_file.path}:1"
865+
type 'c'
866+
assert_line_num 1
867+
type 'c'
868+
end
869+
end
870+
end
871+
872+
def program2
873+
<<~RUBY
874+
1| a = 1
875+
2| b = 2 # braek 2, stop at 2
876+
3| # break 3, stop at def
877+
4| def foo # break 4, stop at 5 (in foo)
878+
5| a = 2
879+
6| end
880+
7|
881+
8| private def bar # break 8, stop at 9 (in bar)
882+
9| a = 3
883+
10| end
884+
11|
885+
12| foo
886+
13| bar
887+
RUBY
888+
end
889+
890+
def test_break_on_line_2
891+
debug_code program2 do
892+
type 'b 2'
893+
type 'c'
894+
assert_line_num 2
895+
type 'c'
896+
end
897+
end
898+
899+
def test_break_on_line_3
900+
debug_code program2 do
901+
type 'b 3'
902+
type 'c'
903+
assert_line_num 4
904+
type 'c'
905+
end
906+
end
907+
908+
def test_break_on_line_4
909+
debug_code program2 do
910+
type 'b 4'
911+
type 'c'
912+
assert_line_num 5
913+
type 'c'
914+
end
915+
end
916+
917+
def test_break_on_line_8
918+
debug_code program2 do
919+
type 'b 8'
920+
type 'c'
921+
assert_line_num 9
922+
type 'c'
923+
end
924+
end
925+
end
841926
end

0 commit comments

Comments
 (0)