byebug 5.0.0 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -1
- data/CONTRIBUTING.md +35 -13
- data/GUIDE.md +256 -198
- data/README.md +5 -11
- data/ext/byebug/byebug.c +5 -43
- data/ext/byebug/byebug.h +6 -1
- data/ext/byebug/context.c +4 -5
- data/lib/byebug/command.rb +64 -64
- data/lib/byebug/command_list.rb +32 -0
- data/lib/byebug/commands.rb +37 -0
- data/lib/byebug/commands/break.rb +45 -37
- data/lib/byebug/commands/catch.rb +52 -28
- data/lib/byebug/commands/condition.rb +19 -13
- data/lib/byebug/commands/continue.rb +15 -11
- data/lib/byebug/commands/delete.rb +18 -12
- data/lib/byebug/commands/disable.rb +9 -10
- data/lib/byebug/commands/disable/breakpoints.rb +13 -11
- data/lib/byebug/commands/disable/display.rb +13 -11
- data/lib/byebug/commands/display.rb +32 -24
- data/lib/byebug/commands/down.rb +18 -14
- data/lib/byebug/commands/edit.rb +42 -26
- data/lib/byebug/commands/enable.rb +9 -3
- data/lib/byebug/commands/enable/breakpoints.rb +13 -11
- data/lib/byebug/commands/enable/display.rb +13 -11
- data/lib/byebug/commands/finish.rb +23 -14
- data/lib/byebug/commands/frame.rb +21 -18
- data/lib/byebug/commands/help.rb +39 -16
- data/lib/byebug/commands/history.rb +16 -10
- data/lib/byebug/commands/info.rb +8 -5
- data/lib/byebug/commands/info/breakpoints.rb +16 -14
- data/lib/byebug/commands/info/display.rb +18 -18
- data/lib/byebug/commands/info/file.rb +22 -22
- data/lib/byebug/commands/info/line.rb +13 -11
- data/lib/byebug/commands/info/program.rb +13 -17
- data/lib/byebug/commands/interrupt.rb +13 -11
- data/lib/byebug/commands/irb.rb +16 -10
- data/lib/byebug/commands/kill.rb +19 -13
- data/lib/byebug/commands/list.rb +35 -24
- data/lib/byebug/commands/method.rb +25 -15
- data/lib/byebug/commands/next.rb +15 -13
- data/lib/byebug/commands/pry.rb +18 -11
- data/lib/byebug/commands/ps.rb +21 -23
- data/lib/byebug/commands/quit.rb +17 -11
- data/lib/byebug/commands/restart.rb +28 -24
- data/lib/byebug/commands/save.rb +23 -15
- data/lib/byebug/commands/set.rb +26 -19
- data/lib/byebug/commands/show.rb +20 -14
- data/lib/byebug/commands/source.rb +15 -14
- data/lib/byebug/commands/step.rb +15 -13
- data/lib/byebug/commands/thread.rb +8 -4
- data/lib/byebug/commands/thread/current.rb +11 -11
- data/lib/byebug/commands/thread/list.rb +14 -14
- data/lib/byebug/commands/thread/resume.rb +14 -14
- data/lib/byebug/commands/thread/stop.rb +14 -14
- data/lib/byebug/commands/thread/switch.rb +15 -14
- data/lib/byebug/commands/tracevar.rb +20 -16
- data/lib/byebug/commands/undisplay.rb +22 -18
- data/lib/byebug/commands/untracevar.rb +13 -11
- data/lib/byebug/commands/up.rb +18 -14
- data/lib/byebug/commands/var.rb +10 -3
- data/lib/byebug/commands/var/all.rb +15 -13
- data/lib/byebug/commands/var/args.rb +37 -0
- data/lib/byebug/commands/var/const.rb +25 -14
- data/lib/byebug/commands/var/global.rb +13 -11
- data/lib/byebug/commands/var/instance.rb +13 -11
- data/lib/byebug/commands/var/local.rb +13 -11
- data/lib/byebug/commands/where.rb +15 -11
- data/lib/byebug/context.rb +71 -73
- data/lib/byebug/core.rb +45 -26
- data/lib/byebug/errors.rb +27 -0
- data/lib/byebug/frame.rb +181 -0
- data/lib/byebug/helpers/eval.rb +67 -26
- data/lib/byebug/helpers/file.rb +18 -3
- data/lib/byebug/helpers/frame.rb +36 -39
- data/lib/byebug/helpers/parse.rb +15 -13
- data/lib/byebug/helpers/path.rb +21 -0
- data/lib/byebug/helpers/reflection.rb +17 -0
- data/lib/byebug/helpers/thread.rb +20 -14
- data/lib/byebug/helpers/toggle.rb +10 -5
- data/lib/byebug/helpers/var.rb +36 -15
- data/lib/byebug/interface.rb +27 -9
- data/lib/byebug/option_setter.rb +93 -0
- data/lib/byebug/printers/base.rb +3 -0
- data/lib/byebug/printers/plain.rb +4 -14
- data/lib/byebug/printers/texts/base.yml +2 -7
- data/lib/byebug/processors/command_processor.rb +101 -102
- data/lib/byebug/processors/control_processor.rb +20 -0
- data/lib/byebug/processors/post_mortem_processor.rb +16 -0
- data/lib/byebug/processors/script_processor.rb +49 -0
- data/lib/byebug/remote.rb +13 -7
- data/lib/byebug/runner.rb +39 -65
- data/lib/byebug/setting.rb +4 -1
- data/lib/byebug/settings/post_mortem.rb +0 -16
- data/lib/byebug/settings/savefile.rb +1 -4
- data/lib/byebug/subcommands.rb +27 -29
- data/lib/byebug/version.rb +4 -1
- metadata +14 -29
- data/lib/byebug/commands/eval.rb +0 -43
- data/lib/byebug/commands/info/args.rb +0 -39
- data/lib/byebug/commands/info/catch.rb +0 -39
- data/lib/byebug/commands/pp.rb +0 -41
- data/lib/byebug/commands/putl.rb +0 -43
- data/lib/byebug/processor.rb +0 -43
- data/lib/byebug/processors/control_command_processor.rb +0 -48
- data/lib/byebug/settings/verbose.rb +0 -20
- data/lib/byebug/state.rb +0 -12
- data/lib/byebug/states/control_state.rb +0 -26
- data/lib/byebug/states/regular_state.rb +0 -187
- data/lib/byebug/subcommand_list.rb +0 -33
data/lib/byebug/commands/list.rb
CHANGED
@@ -10,34 +10,41 @@ module Byebug
|
|
10
10
|
include Helpers::FileHelper
|
11
11
|
include Helpers::ParseHelper
|
12
12
|
|
13
|
-
|
13
|
+
self.allow_in_post_mortem = true
|
14
|
+
|
15
|
+
def self.regexp
|
14
16
|
/^\s* l(?:ist)? (?:\s*([-=])|\s+(\S+))? \s*$/x
|
15
17
|
end
|
16
18
|
|
19
|
+
def self.description
|
20
|
+
<<-EOD
|
21
|
+
l[ist][[-=]][ nn-mm]
|
22
|
+
|
23
|
+
#{short_description}
|
24
|
+
|
25
|
+
Lists lines forward from current line or from the place where code was
|
26
|
+
last listed. If "list-" is specified, lists backwards instead. If
|
27
|
+
"list=" is specified, lists from current line regardless of where code
|
28
|
+
was last listed. A line range can also be specified to list specific
|
29
|
+
sections of code.
|
30
|
+
EOD
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.short_description
|
34
|
+
'Lists lines of source code'
|
35
|
+
end
|
36
|
+
|
17
37
|
def execute
|
18
|
-
|
19
|
-
return errmsg
|
38
|
+
msg = "No sourcefile available for #{frame.file}"
|
39
|
+
return errmsg(msg) unless File.exist?(frame.file)
|
20
40
|
|
21
|
-
|
22
|
-
max_lines = n_lines(@state.file)
|
41
|
+
max_lines = n_lines(frame.file)
|
23
42
|
b, e = range(@match[2], max_lines)
|
24
43
|
return errmsg('Invalid line range') unless valid_range?(b, e, max_lines)
|
25
44
|
|
26
45
|
display_lines(b, e)
|
27
46
|
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
def description
|
32
|
-
<<-EOD
|
33
|
-
l[ist][[-=]][ nn-mm]
|
34
|
-
|
35
|
-
Lists lines of code forward from current line or from the place where
|
36
|
-
code was last listed. If "list-" is specified, lists backwards instead.
|
37
|
-
If "list=" is specified, lists from current line regardless of where
|
38
|
-
code was last listed. A line range can also be specified to list
|
39
|
-
specific sections of code.
|
40
|
-
EOD
|
47
|
+
processor.prev_line = b
|
41
48
|
end
|
42
49
|
|
43
50
|
private
|
@@ -99,9 +106,10 @@ module Byebug
|
|
99
106
|
end
|
100
107
|
|
101
108
|
def lower(size, direction = '+')
|
102
|
-
|
109
|
+
prev_line = processor.prev_line
|
110
|
+
return frame.line - size / 2 if direction == '=' || prev_line.nil?
|
103
111
|
|
104
|
-
move(
|
112
|
+
move(prev_line, size, direction)
|
105
113
|
end
|
106
114
|
|
107
115
|
def move(line, size, direction = '+')
|
@@ -109,16 +117,19 @@ module Byebug
|
|
109
117
|
end
|
110
118
|
|
111
119
|
#
|
112
|
-
# Show
|
120
|
+
# Show a range of lines in the current file.
|
121
|
+
#
|
122
|
+
# @param min [Integer] Lower bound
|
123
|
+
# @param max [Integer] Upper bound
|
113
124
|
#
|
114
125
|
def display_lines(min, max)
|
115
|
-
puts "\n[#{min}, #{max}] in #{
|
126
|
+
puts "\n[#{min}, #{max}] in #{frame.file}"
|
116
127
|
|
117
|
-
File.foreach(
|
128
|
+
File.foreach(frame.file).with_index do |line, lineno|
|
118
129
|
break if lineno + 1 > max
|
119
130
|
next unless (min..max).include?(lineno + 1)
|
120
131
|
|
121
|
-
mark = lineno + 1 ==
|
132
|
+
mark = lineno + 1 == frame.line ? '=> ' : ' '
|
122
133
|
puts format("#{mark}%#{max.to_s.size}d: %s", lineno + 1, line)
|
123
134
|
end
|
124
135
|
end
|
@@ -1,18 +1,40 @@
|
|
1
1
|
require 'byebug/command'
|
2
|
+
require 'byebug/helpers/eval'
|
2
3
|
|
3
4
|
module Byebug
|
4
5
|
#
|
5
6
|
# Show methods of specific classes/modules/objects.
|
6
7
|
#
|
7
8
|
class MethodCommand < Command
|
8
|
-
include
|
9
|
+
include Helpers::EvalHelper
|
9
10
|
|
10
|
-
|
11
|
+
self.allow_in_post_mortem = true
|
12
|
+
|
13
|
+
def self.regexp
|
11
14
|
/^\s* m(?:ethod)? \s+ (i(:?nstance)?\s+)?/x
|
12
15
|
end
|
13
16
|
|
17
|
+
def self.description
|
18
|
+
<<-EOD
|
19
|
+
m[ethod] (i[nstance][ <obj>]|<class|module>)
|
20
|
+
|
21
|
+
#{short_description}
|
22
|
+
|
23
|
+
When invoked with "instance", shows instance methods of the object
|
24
|
+
specified as argument or of self no object was specified.
|
25
|
+
|
26
|
+
When invoked only with a class or module, shows class methods of the
|
27
|
+
class or module specified as argument.
|
28
|
+
EOD
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.short_description
|
32
|
+
'Shows methods of an object, class or module'
|
33
|
+
end
|
34
|
+
|
14
35
|
def execute
|
15
|
-
obj =
|
36
|
+
obj = single_thread_eval(@match.post_match)
|
37
|
+
|
16
38
|
result =
|
17
39
|
if @match[1]
|
18
40
|
prc('method.methods', obj.methods.sort) { |item, _| { name: item } }
|
@@ -25,17 +47,5 @@ module Byebug
|
|
25
47
|
end
|
26
48
|
puts result
|
27
49
|
end
|
28
|
-
|
29
|
-
def description
|
30
|
-
<<-EOD
|
31
|
-
m[ethod] (i[nstance][ <obj>]|<class|module>)
|
32
|
-
|
33
|
-
When invoked with "instance", shows instance methods of the object
|
34
|
-
specified as argument or of self no object was specified.
|
35
|
-
|
36
|
-
When invoked only with a class or module, shows class methods of the
|
37
|
-
class or module specified as argument.
|
38
|
-
EOD
|
39
|
-
end
|
40
50
|
end
|
41
51
|
end
|
data/lib/byebug/commands/next.rb
CHANGED
@@ -11,26 +11,28 @@ module Byebug
|
|
11
11
|
class NextCommand < Command
|
12
12
|
include Helpers::ParseHelper
|
13
13
|
|
14
|
-
self.
|
15
|
-
|
16
|
-
def regexp
|
14
|
+
def self.regexp
|
17
15
|
/^\s* n(?:ext)? (?:\s+(\S+))? \s*$/x
|
18
16
|
end
|
19
17
|
|
20
|
-
def
|
21
|
-
steps, err = parse_steps(@match[1], 'Next')
|
22
|
-
return errmsg(err) unless steps
|
23
|
-
|
24
|
-
@state.context.step_over(steps, @state.frame)
|
25
|
-
@state.proceed
|
26
|
-
end
|
27
|
-
|
28
|
-
def description
|
18
|
+
def self.description
|
29
19
|
<<-EOD
|
30
20
|
n[ext][ nnn]
|
31
21
|
|
32
|
-
|
22
|
+
#{short_description}
|
33
23
|
EOD
|
34
24
|
end
|
25
|
+
|
26
|
+
def self.short_description
|
27
|
+
'Runs one or more lines of code'
|
28
|
+
end
|
29
|
+
|
30
|
+
def execute
|
31
|
+
steps, err = parse_steps(@match[1], 'Next')
|
32
|
+
return errmsg(err) unless steps
|
33
|
+
|
34
|
+
context.step_over(steps, context.frame.pos)
|
35
|
+
processor.proceed!
|
36
|
+
end
|
35
37
|
end
|
36
38
|
end
|
data/lib/byebug/commands/pry.rb
CHANGED
@@ -1,16 +1,31 @@
|
|
1
1
|
require 'byebug/command'
|
2
|
+
require 'byebug/helpers/eval'
|
2
3
|
|
3
4
|
module Byebug
|
4
5
|
#
|
5
6
|
# Enter Pry from byebug's prompt
|
6
7
|
#
|
7
8
|
class PryCommand < Command
|
8
|
-
|
9
|
+
self.allow_in_post_mortem = true
|
10
|
+
|
11
|
+
def self.regexp
|
9
12
|
/^\s* pry \s*$/x
|
10
13
|
end
|
11
14
|
|
15
|
+
def self.description
|
16
|
+
<<-EOD
|
17
|
+
pry
|
18
|
+
|
19
|
+
#{short_description}
|
20
|
+
EOD
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.short_description
|
24
|
+
'Starts a Pry session'
|
25
|
+
end
|
26
|
+
|
12
27
|
def execute
|
13
|
-
unless
|
28
|
+
unless processor.interface.is_a?(LocalInterface)
|
14
29
|
return errmsg(pr('base.errors.only_local'))
|
15
30
|
end
|
16
31
|
|
@@ -20,15 +35,7 @@ module Byebug
|
|
20
35
|
errmsg(pr('pry.errors.not_installed'))
|
21
36
|
end
|
22
37
|
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
def description
|
27
|
-
<<-EOD
|
28
|
-
pry
|
29
|
-
|
30
|
-
Starts a Pry session.
|
31
|
-
EOD
|
38
|
+
context.binding.pry
|
32
39
|
end
|
33
40
|
end
|
34
41
|
end
|
data/lib/byebug/commands/ps.rb
CHANGED
@@ -5,40 +5,38 @@ require 'byebug/helpers/eval'
|
|
5
5
|
|
6
6
|
module Byebug
|
7
7
|
#
|
8
|
-
#
|
8
|
+
# Enhanced evaluation of expressions from byebug's prompt. Besides
|
9
|
+
# evaluating, it sorts and pretty prints arrays.
|
9
10
|
#
|
10
11
|
class PsCommand < Command
|
11
12
|
include Helpers::EvalHelper
|
12
|
-
include Columnize
|
13
13
|
|
14
|
-
self.
|
14
|
+
self.allow_in_post_mortem = true
|
15
15
|
|
16
|
-
def regexp
|
17
|
-
/^\s* ps \s
|
16
|
+
def self.regexp
|
17
|
+
/^\s* ps (\s+ (.+)) \s*$/x
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
out = StringIO.new
|
22
|
-
run_with_binding do |b|
|
23
|
-
res = eval_with_setting(b, @match.post_match, Setting[:stack_on_error])
|
24
|
-
|
25
|
-
if res.is_a?(Array)
|
26
|
-
puts "#{columnize(res.map(&:to_s).sort!, Setting[:width])}"
|
27
|
-
else
|
28
|
-
PP.pp(res, out)
|
29
|
-
puts out.string
|
30
|
-
end
|
31
|
-
end
|
32
|
-
rescue
|
33
|
-
out.puts $ERROR_INFO.message
|
34
|
-
end
|
35
|
-
|
36
|
-
def description
|
20
|
+
def self.description
|
37
21
|
<<-EOD
|
38
22
|
ps <expression>
|
39
23
|
|
40
|
-
|
24
|
+
#{short_description}
|
41
25
|
EOD
|
42
26
|
end
|
27
|
+
|
28
|
+
def self.short_description
|
29
|
+
'Evaluates an expression and prettyprints & sort the result'
|
30
|
+
end
|
31
|
+
|
32
|
+
def execute
|
33
|
+
return puts(help) unless @match[1]
|
34
|
+
|
35
|
+
res = thread_safe_eval(@match[1])
|
36
|
+
res = res.sort if res.respond_to?(:sort)
|
37
|
+
|
38
|
+
out = PP.pp(res, StringIO.new, Setting[:width])
|
39
|
+
print pr('eval.result', expr: @match[1], result: out.string)
|
40
|
+
end
|
43
41
|
end
|
44
42
|
end
|
data/lib/byebug/commands/quit.rb
CHANGED
@@ -6,29 +6,35 @@ module Byebug
|
|
6
6
|
#
|
7
7
|
class QuitCommand < Command
|
8
8
|
self.allow_in_control = true
|
9
|
+
self.allow_in_post_mortem = true
|
9
10
|
|
10
|
-
def regexp
|
11
|
+
def self.regexp
|
11
12
|
/^\s* q(?:uit)? \s* (?:(!|\s+unconditionally))? \s*$/x
|
12
13
|
end
|
13
14
|
|
14
|
-
def
|
15
|
-
return unless @match[1] || confirm(pr('quit.confirmations.really'))
|
16
|
-
|
17
|
-
@state.interface.autosave
|
18
|
-
@state.interface.close
|
19
|
-
exit! # exit -> exit!: No graceful way to stop...
|
20
|
-
end
|
21
|
-
|
22
|
-
def description
|
15
|
+
def self.description
|
23
16
|
<<-EOD
|
24
17
|
q[uit] [!|unconditionally]
|
25
18
|
|
26
|
-
|
19
|
+
#{short_description}
|
27
20
|
|
28
21
|
Normally we prompt before exiting. However if the parameter
|
29
22
|
"unconditionally" is given or command is suffixed with !, we exit
|
30
23
|
without asking further questions.
|
31
24
|
EOD
|
32
25
|
end
|
26
|
+
|
27
|
+
def self.short_description
|
28
|
+
'Exits byebug'
|
29
|
+
end
|
30
|
+
|
31
|
+
def execute
|
32
|
+
return unless @match[1] || confirm(pr('quit.confirmations.really'))
|
33
|
+
|
34
|
+
processor.interface.autosave
|
35
|
+
processor.interface.close
|
36
|
+
|
37
|
+
Process.exit!
|
38
|
+
end
|
33
39
|
end
|
34
40
|
end
|
@@ -1,41 +1,45 @@
|
|
1
1
|
require 'byebug/command'
|
2
|
+
require 'byebug/helpers/path'
|
3
|
+
require 'shellwords'
|
2
4
|
|
3
5
|
module Byebug
|
4
6
|
#
|
5
7
|
# Restart debugged program from within byebug.
|
6
8
|
#
|
7
9
|
class RestartCommand < Command
|
8
|
-
|
10
|
+
include Helpers::PathHelper
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
end
|
12
|
+
self.allow_in_control = true
|
13
|
+
self.allow_in_post_mortem = true
|
13
14
|
|
14
|
-
def
|
15
|
-
|
16
|
-
cmd = "#{Gem.bin_path('byebug', 'byebug')} #{$PROGRAM_NAME}"
|
17
|
-
else
|
18
|
-
cmd = $PROGRAM_NAME
|
19
|
-
end
|
20
|
-
|
21
|
-
if @match[:args]
|
22
|
-
cmd += " #{@match[:args]}"
|
23
|
-
else
|
24
|
-
require 'shellwords'
|
25
|
-
cmd += " #{$ARGV.compact.shelljoin}"
|
26
|
-
end
|
27
|
-
|
28
|
-
puts pr('restart.success', cmd: cmd)
|
29
|
-
exec(cmd)
|
15
|
+
def self.regexp
|
16
|
+
/^\s* restart (?:\s+(?<args>.+))? \s*$/x
|
30
17
|
end
|
31
18
|
|
32
|
-
def description
|
19
|
+
def self.description
|
33
20
|
<<-EOD
|
34
|
-
restart
|
21
|
+
restart [args]
|
35
22
|
|
36
|
-
|
37
|
-
|
23
|
+
#{short_description}
|
24
|
+
|
25
|
+
This is a re-exec - all byebug state is lost. If command arguments are
|
26
|
+
passed those are used.
|
38
27
|
EOD
|
39
28
|
end
|
29
|
+
|
30
|
+
def self.short_description
|
31
|
+
'Restarts the debugged program'
|
32
|
+
end
|
33
|
+
|
34
|
+
def execute
|
35
|
+
argv = [$PROGRAM_NAME]
|
36
|
+
|
37
|
+
argv.unshift(bin_file) if Byebug.mode == :standalone
|
38
|
+
|
39
|
+
argv += (@match[:args] ? @match[:args].shellsplit : $ARGV.compact)
|
40
|
+
|
41
|
+
puts pr('restart.success', cmd: argv.shelljoin)
|
42
|
+
exec(*argv)
|
43
|
+
end
|
40
44
|
end
|
41
45
|
end
|
data/lib/byebug/commands/save.rb
CHANGED
@@ -6,11 +6,31 @@ module Byebug
|
|
6
6
|
#
|
7
7
|
class SaveCommand < Command
|
8
8
|
self.allow_in_control = true
|
9
|
+
self.allow_in_post_mortem = true
|
9
10
|
|
10
|
-
def regexp
|
11
|
+
def self.regexp
|
11
12
|
/^\s* sa(?:ve)? (?:\s+(\S+))? \s*$/x
|
12
13
|
end
|
13
14
|
|
15
|
+
def self.description
|
16
|
+
<<-EOD
|
17
|
+
save[ FILE]
|
18
|
+
|
19
|
+
#{short_description}
|
20
|
+
|
21
|
+
Byebug state is saved as a script file. This includes breakpoints,
|
22
|
+
catchpoints, display expressions and some settings. If no filename is
|
23
|
+
given, byebug will fabricate one.
|
24
|
+
|
25
|
+
Use the "source" command in another debug session to restore the saved
|
26
|
+
file.
|
27
|
+
EOD
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.short_description
|
31
|
+
'Saves current byebug session to a file'
|
32
|
+
end
|
33
|
+
|
14
34
|
def execute
|
15
35
|
file = File.open(@match[1] || Setting[:savefile], 'w')
|
16
36
|
|
@@ -23,18 +43,6 @@ module Byebug
|
|
23
43
|
file.close
|
24
44
|
end
|
25
45
|
|
26
|
-
def description
|
27
|
-
<<-EOD
|
28
|
-
save[ FILE]
|
29
|
-
|
30
|
-
Saves current byebug state to FILE as a script file. This includes
|
31
|
-
breakpoints, catchpoints, display expressions and some settings. If no
|
32
|
-
filename is given, we will fabricate one.
|
33
|
-
|
34
|
-
Use the "source" command in another debug session to restore them.
|
35
|
-
EOD
|
36
|
-
end
|
37
|
-
|
38
46
|
private
|
39
47
|
|
40
48
|
def save_breakpoints(file)
|
@@ -50,11 +58,11 @@ module Byebug
|
|
50
58
|
end
|
51
59
|
|
52
60
|
def save_displays(file)
|
53
|
-
|
61
|
+
Byebug.displays.each { |d| file.puts "display #{d[1]}" if d[0] }
|
54
62
|
end
|
55
63
|
|
56
64
|
def save_settings(file)
|
57
|
-
%w(
|
65
|
+
%w(autoirb autolist basename).each do |setting|
|
58
66
|
file.puts "set #{setting} #{Setting[setting.to_sym]}"
|
59
67
|
end
|
60
68
|
end
|