forked from Trepan-Debuggers/rb-trepanning
-
Notifications
You must be signed in to change notification settings - Fork 0
/
different.rb
69 lines (55 loc) · 2.04 KB
/
different.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# -*- coding: utf-8 -*-
# Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
require_relative '../base/subcmd'
class Trepan::Subcommand::SetDifferent < Trepan::SetBoolSubcommand
unless defined?(HELP)
Trepanning::Subcommand.set_name_prefix(__FILE__, self)
HELP = <<-EOH
#{PREFIX.join(' ')} [on|off|nostack]
Set to make sure 'next' or 'step' moves to a new position.
Due to the interpretive, expression-oriented nature of the Ruby
Language and implementation, each line often may contain many possible
stopping points with possibly different event type. In a debugger it
is sometimes desirable to continue but stop only when the position
next changes.
Setting 'different' to on will cause each 'step' or 'next' command to
stop at a different position.
Note though that the notion of different does take into account stack
nesting. So in ARGV.map {|arg| arg.to_i} you get a stop before ARGV as
well as one in the block.
If you to ignore stopping at added nesting levels, there are two
possibilities. 'set step nostack' will ignore stack nestings levels on
a given line. Also you can use 'next', but that also stepping into
functions on different lines to also be skipped.
See also 'step', 'next' which have suffixes '+' and '-' which
override this setting.
EOH
IN_LIST = true
MIN_ABBREV = 'dif'.size
SHORT_HELP = "Set to make sure 'next/step' move to a new position."
end
completion %w(on off nostack)
def run(args)
if args.size == 3 && 'nostack' == args[2]
@proc.settings[:different] = 'nostack'
msg("different is nostack.")
else
super
end
@proc.different_pos = @proc.settings[:different]
end
end
if __FILE__ == $0
# Demo it.
require_relative '../../mock'
name = File.basename(__FILE__, '.rb')
# FIXME: DRY the below code
dbgr, cmd = MockDebugger::setup('set')
subcommand = Trepan::Subcommand::SetDifferent.new(cmd)
testcmdMgr = Trepan::Subcmd.new(subcommand)
subcommand.run_show_bool
subcommand.summary_help(name)
puts
puts '-' * 20
puts subcommand.save_command
end