pry-byebug 3.1.0 → 3.2.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 +17 -1
- data/README.md +7 -6
- data/lib/byebug/processors/pry_processor.rb +3 -5
- data/lib/pry-byebug.rb +1 -3
- data/lib/pry-byebug/cli.rb +1 -2
- data/lib/pry-byebug/commands.rb +8 -0
- data/lib/pry-byebug/commands/breakpoint.rb +135 -0
- data/lib/pry-byebug/commands/continue.rb +37 -0
- data/lib/pry-byebug/commands/down.rb +33 -0
- data/lib/pry-byebug/commands/finish.rb +26 -0
- data/lib/pry-byebug/commands/frame.rb +33 -0
- data/lib/pry-byebug/commands/next.rb +37 -0
- data/lib/pry-byebug/commands/step.rb +32 -0
- data/lib/pry-byebug/commands/up.rb +33 -0
- data/lib/pry-byebug/helpers/breakpoints.rb +84 -0
- data/lib/pry-byebug/helpers/multiline.rb +21 -0
- data/lib/pry-byebug/helpers/navigation.rb +17 -0
- data/lib/pry-byebug/version.rb +1 -1
- data/lib/pry/byebug/breakpoints.rb +4 -0
- metadata +23 -45
- data/.gitignore +0 -18
- data/.rubocop.yml +0 -14
- data/.rubocop_todo.yml +0 -20
- data/.travis.yml +0 -9
- data/Gemfile +0 -14
- data/Rakefile +0 -17
- data/lib/pry/commands/breakpoint.rb +0 -216
- data/lib/pry/commands/frames.rb +0 -79
- data/lib/pry/commands/stepping.rb +0 -88
- data/pry-byebug.gemspec +0 -23
- data/test/base_test.rb +0 -16
- data/test/breakpoints_test.rb +0 -146
- data/test/examples/break1.rb +0 -23
- data/test/examples/break2.rb +0 -21
- data/test/examples/deep_stepping.rb +0 -9
- data/test/examples/frames.rb +0 -14
- data/test/examples/stepping.rb +0 -29
- data/test/frames_test.rb +0 -58
- data/test/processor_test.rb +0 -40
- data/test/pry_ext_test.rb +0 -4
- data/test/pry_remote_ext_test.rb +0 -4
- data/test/stepping_test.rb +0 -78
- data/test/test_helper.rb +0 -35
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'pry-byebug/helpers/navigation'
|
2
|
+
|
3
|
+
module PryByebug
|
4
|
+
#
|
5
|
+
# Run a number of Ruby statements and then stop again
|
6
|
+
#
|
7
|
+
class StepCommand < Pry::ClassCommand
|
8
|
+
include Helpers::Navigation
|
9
|
+
|
10
|
+
match 'step'
|
11
|
+
group 'Byebug'
|
12
|
+
description 'Step execution into the next line or method.'
|
13
|
+
|
14
|
+
banner <<-BANNER
|
15
|
+
Usage: step [TIMES]
|
16
|
+
|
17
|
+
Step execution forward. By default, moves a single step.
|
18
|
+
|
19
|
+
Examples:
|
20
|
+
step #=> Move a single step forward.
|
21
|
+
step 5 #=> Execute the next 5 steps.
|
22
|
+
BANNER
|
23
|
+
|
24
|
+
def process
|
25
|
+
PryByebug.check_file_context(target)
|
26
|
+
|
27
|
+
breakout_navigation :step, times: args.first
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
Pry::Commands.add_command(PryByebug::StepCommand)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'pry-byebug/helpers/navigation'
|
2
|
+
|
3
|
+
module PryByebug
|
4
|
+
#
|
5
|
+
# Travel up the frame stack
|
6
|
+
#
|
7
|
+
class UpCommand < Pry::ClassCommand
|
8
|
+
include Helpers::Navigation
|
9
|
+
|
10
|
+
match 'up'
|
11
|
+
group 'Byebug'
|
12
|
+
|
13
|
+
description 'Move current frame up.'
|
14
|
+
|
15
|
+
banner <<-BANNER
|
16
|
+
Usage: up [TIMES]
|
17
|
+
|
18
|
+
Move current frame up. By default, moves by 1 frame.
|
19
|
+
|
20
|
+
Examples:
|
21
|
+
up #=> Move up 1 frame.
|
22
|
+
up 5 #=> Move up 5 frames.
|
23
|
+
BANNER
|
24
|
+
|
25
|
+
def process
|
26
|
+
PryByebug.check_file_context(target)
|
27
|
+
|
28
|
+
breakout_navigation :up, times: args.first
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
Pry::Commands.add_command(PryByebug::UpCommand)
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'byebug'
|
2
|
+
|
3
|
+
module PryByebug
|
4
|
+
module Helpers
|
5
|
+
#
|
6
|
+
# Common helpers for breakpoint related commands
|
7
|
+
#
|
8
|
+
module Breakpoints
|
9
|
+
#
|
10
|
+
# Byebug's array of breakpoints.
|
11
|
+
#
|
12
|
+
def breakpoints
|
13
|
+
Pry::Byebug::Breakpoints
|
14
|
+
end
|
15
|
+
|
16
|
+
#
|
17
|
+
# Current file in the target binding. Used as the default breakpoint
|
18
|
+
# location.
|
19
|
+
#
|
20
|
+
def current_file
|
21
|
+
target.eval('__FILE__')
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# Prints a message with bold font.
|
26
|
+
#
|
27
|
+
def bold_puts(msg)
|
28
|
+
output.puts(text.bold(msg))
|
29
|
+
end
|
30
|
+
|
31
|
+
#
|
32
|
+
# Print out full information about a breakpoint.
|
33
|
+
#
|
34
|
+
# Includes surrounding code at that point.
|
35
|
+
#
|
36
|
+
def print_full_breakpoint(br)
|
37
|
+
header = "Breakpoint #{br.id}:"
|
38
|
+
status = br.enabled? ? 'Enabled' : 'Disabled'
|
39
|
+
code = br.source_code.with_line_numbers.to_s
|
40
|
+
condition = br.expr ? "#{text.bold('Condition:')} #{br.expr}\n" : ''
|
41
|
+
|
42
|
+
output.puts <<-EOP.gsub(/ {8}/, '')
|
43
|
+
|
44
|
+
#{text.bold(header)} #{br} (#{status}) #{condition}
|
45
|
+
|
46
|
+
#{code}
|
47
|
+
|
48
|
+
EOP
|
49
|
+
end
|
50
|
+
|
51
|
+
#
|
52
|
+
# Print out concise information about a breakpoint.
|
53
|
+
#
|
54
|
+
def print_short_breakpoint(breakpoint)
|
55
|
+
id = format('%*d', max_width, breakpoint.id)
|
56
|
+
status = breakpoint.enabled? ? 'Yes' : 'No '
|
57
|
+
expr = breakpoint.expr ? " #{breakpoint.expr} " : ''
|
58
|
+
|
59
|
+
output.puts(" #{id} #{status} #{breakpoint}#{expr}")
|
60
|
+
end
|
61
|
+
|
62
|
+
#
|
63
|
+
# Prints a header for the breakpoint list.
|
64
|
+
#
|
65
|
+
def print_breakpoints_header
|
66
|
+
header = "#{' ' * (max_width - 1)}# Enabled At "
|
67
|
+
|
68
|
+
output.puts <<-EOP.gsub(/ {8}/, '')
|
69
|
+
|
70
|
+
#{text.bold(header)}
|
71
|
+
#{text.bold('-' * header.size)}
|
72
|
+
|
73
|
+
EOP
|
74
|
+
end
|
75
|
+
|
76
|
+
#
|
77
|
+
# Max width of breakpoints id column
|
78
|
+
#
|
79
|
+
def max_width
|
80
|
+
breakpoints.last ? breakpoints.last.id.to_s.length : 1
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module PryByebug
|
2
|
+
module Helpers
|
3
|
+
#
|
4
|
+
# Helpers to help handling multiline inputs
|
5
|
+
#
|
6
|
+
module Multiline
|
7
|
+
#
|
8
|
+
# Returns true if we are in a multiline context and, as a side effect,
|
9
|
+
# updates the partial evaluation string with the current input.
|
10
|
+
#
|
11
|
+
# Returns false otherwise
|
12
|
+
#
|
13
|
+
def check_multiline_context
|
14
|
+
return false if eval_string.empty?
|
15
|
+
|
16
|
+
eval_string.replace("#{eval_string}#{match} #{arg_string}\n")
|
17
|
+
true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module PryByebug
|
2
|
+
module Helpers
|
3
|
+
#
|
4
|
+
# Helpers to aid breaking out of the REPL loop
|
5
|
+
#
|
6
|
+
module Navigation
|
7
|
+
#
|
8
|
+
# Breaks out of the REPL loop and signals tracer
|
9
|
+
#
|
10
|
+
def breakout_navigation(action, options = {})
|
11
|
+
_pry_.binding_stack.clear
|
12
|
+
|
13
|
+
throw :breakout_nav, action: action, options: options, pry: _pry_
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/pry-byebug/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pry-byebug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Rodríguez
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-07-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pry
|
@@ -31,56 +31,47 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '5.0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '5.0'
|
42
42
|
description: |-
|
43
|
-
Combine 'pry' with 'byebug'. Adds 'step', 'next',
|
44
|
-
|
43
|
+
Combine 'pry' with 'byebug'. Adds 'step', 'next', 'finish',
|
44
|
+
'continue' and 'break' commands to control execution.
|
45
45
|
email: deivid.rodriguez@gmail.com
|
46
46
|
executables: []
|
47
47
|
extensions: []
|
48
|
-
extra_rdoc_files:
|
48
|
+
extra_rdoc_files:
|
49
|
+
- CHANGELOG.md
|
50
|
+
- README.md
|
49
51
|
files:
|
50
|
-
- ".gitignore"
|
51
|
-
- ".rubocop.yml"
|
52
|
-
- ".rubocop_todo.yml"
|
53
|
-
- ".travis.yml"
|
54
52
|
- CHANGELOG.md
|
55
|
-
- Gemfile
|
56
53
|
- LICENSE
|
57
54
|
- README.md
|
58
|
-
- Rakefile
|
59
55
|
- lib/byebug/processors/pry_processor.rb
|
60
56
|
- lib/pry-byebug.rb
|
61
57
|
- lib/pry-byebug/base.rb
|
62
58
|
- lib/pry-byebug/cli.rb
|
59
|
+
- lib/pry-byebug/commands.rb
|
60
|
+
- lib/pry-byebug/commands/breakpoint.rb
|
61
|
+
- lib/pry-byebug/commands/continue.rb
|
62
|
+
- lib/pry-byebug/commands/down.rb
|
63
|
+
- lib/pry-byebug/commands/finish.rb
|
64
|
+
- lib/pry-byebug/commands/frame.rb
|
65
|
+
- lib/pry-byebug/commands/next.rb
|
66
|
+
- lib/pry-byebug/commands/step.rb
|
67
|
+
- lib/pry-byebug/commands/up.rb
|
68
|
+
- lib/pry-byebug/helpers/breakpoints.rb
|
69
|
+
- lib/pry-byebug/helpers/multiline.rb
|
70
|
+
- lib/pry-byebug/helpers/navigation.rb
|
63
71
|
- lib/pry-byebug/pry_ext.rb
|
64
72
|
- lib/pry-byebug/pry_remote_ext.rb
|
65
73
|
- lib/pry-byebug/version.rb
|
66
74
|
- lib/pry/byebug/breakpoints.rb
|
67
|
-
- lib/pry/commands/breakpoint.rb
|
68
|
-
- lib/pry/commands/frames.rb
|
69
|
-
- lib/pry/commands/stepping.rb
|
70
|
-
- pry-byebug.gemspec
|
71
|
-
- test/base_test.rb
|
72
|
-
- test/breakpoints_test.rb
|
73
|
-
- test/examples/break1.rb
|
74
|
-
- test/examples/break2.rb
|
75
|
-
- test/examples/deep_stepping.rb
|
76
|
-
- test/examples/frames.rb
|
77
|
-
- test/examples/stepping.rb
|
78
|
-
- test/frames_test.rb
|
79
|
-
- test/processor_test.rb
|
80
|
-
- test/pry_ext_test.rb
|
81
|
-
- test/pry_remote_ext_test.rb
|
82
|
-
- test/stepping_test.rb
|
83
|
-
- test/test_helper.rb
|
84
75
|
homepage: https://github.com/deivid-rodriguez/pry-byebug
|
85
76
|
licenses:
|
86
77
|
- MIT
|
@@ -101,21 +92,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
92
|
version: '0'
|
102
93
|
requirements: []
|
103
94
|
rubyforge_project:
|
104
|
-
rubygems_version: 2.4.
|
95
|
+
rubygems_version: 2.4.5
|
105
96
|
signing_key:
|
106
97
|
specification_version: 4
|
107
98
|
summary: Fast debugging with Pry.
|
108
|
-
test_files:
|
109
|
-
- test/base_test.rb
|
110
|
-
- test/breakpoints_test.rb
|
111
|
-
- test/examples/break1.rb
|
112
|
-
- test/examples/break2.rb
|
113
|
-
- test/examples/deep_stepping.rb
|
114
|
-
- test/examples/frames.rb
|
115
|
-
- test/examples/stepping.rb
|
116
|
-
- test/frames_test.rb
|
117
|
-
- test/processor_test.rb
|
118
|
-
- test/pry_ext_test.rb
|
119
|
-
- test/pry_remote_ext_test.rb
|
120
|
-
- test/stepping_test.rb
|
121
|
-
- test/test_helper.rb
|
99
|
+
test_files: []
|
data/.gitignore
DELETED
data/.rubocop.yml
DELETED
data/.rubocop_todo.yml
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# This configuration was generated by `rubocop --auto-gen-config`
|
2
|
-
# on 2015-03-13 12:00:51 -0300 using RuboCop version 0.29.1.
|
3
|
-
# The point is for the user to remove these configuration records
|
4
|
-
# one by one as the offenses are removed from the code base.
|
5
|
-
# Note that changes in the inspected code, or installation of new
|
6
|
-
# versions of RuboCop, may require this file to be generated again.
|
7
|
-
|
8
|
-
# Offense count: 1
|
9
|
-
Metrics/AbcSize:
|
10
|
-
Max: 39
|
11
|
-
|
12
|
-
# Offense count: 1
|
13
|
-
# Configuration parameters: CountComments.
|
14
|
-
Metrics/ClassLength:
|
15
|
-
Max: 142
|
16
|
-
|
17
|
-
# Offense count: 1
|
18
|
-
# Configuration parameters: CountComments.
|
19
|
-
Metrics/MethodLength:
|
20
|
-
Max: 23
|
data/.travis.yml
DELETED
data/Gemfile
DELETED
data/Rakefile
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'bundler/gem_tasks'
|
2
|
-
|
3
|
-
require 'rake/testtask'
|
4
|
-
|
5
|
-
desc 'Run tests'
|
6
|
-
Rake::TestTask.new(:test) do |t|
|
7
|
-
t.libs << 'test'
|
8
|
-
t.ruby_opts += ['-w']
|
9
|
-
t.pattern = 'test/**/*_test.rb'
|
10
|
-
end
|
11
|
-
|
12
|
-
require 'rubocop/rake_task'
|
13
|
-
|
14
|
-
desc 'Run RuboCop'
|
15
|
-
task(:rubocop) { RuboCop::RakeTask.new }
|
16
|
-
|
17
|
-
task default: [:test, :rubocop]
|
@@ -1,216 +0,0 @@
|
|
1
|
-
require 'pry/byebug/breakpoints'
|
2
|
-
|
3
|
-
#
|
4
|
-
# Main Pry class.
|
5
|
-
#
|
6
|
-
# We're going to add to it custom breakpoint commands for Pry-Byebug
|
7
|
-
#
|
8
|
-
class Pry
|
9
|
-
BreakpointCommands = CommandSet.new do
|
10
|
-
create_command 'break' do
|
11
|
-
description 'Set or edit a breakpoint.'
|
12
|
-
|
13
|
-
banner <<-BANNER
|
14
|
-
Usage: break <METHOD | FILE:LINE | LINE> [if CONDITION]
|
15
|
-
break --condition N [CONDITION]
|
16
|
-
break [--show | --delete | --enable | --disable] N
|
17
|
-
break [--delete-all | --disable-all]
|
18
|
-
Aliases: breakpoint
|
19
|
-
|
20
|
-
Set a breakpoint. Accepts a line number in the current file, a file and
|
21
|
-
line number, or a method, and an optional condition.
|
22
|
-
|
23
|
-
Pass appropriate flags to manipulate existing breakpoints.
|
24
|
-
|
25
|
-
Examples:
|
26
|
-
|
27
|
-
break SomeClass#run Break at the start of `SomeClass#run`.
|
28
|
-
break Foo#bar if baz? Break at `Foo#bar` only if `baz?`.
|
29
|
-
break app/models/user.rb:15 Break at line 15 in user.rb.
|
30
|
-
break 14 Break at line 14 in the current file.
|
31
|
-
|
32
|
-
break --condition 4 x > 2 Add/change condition on breakpoint #4.
|
33
|
-
break --condition 3 Remove the condition on breakpoint #3.
|
34
|
-
|
35
|
-
break --delete 5 Delete breakpoint #5.
|
36
|
-
break --disable-all Disable all breakpoints.
|
37
|
-
|
38
|
-
break List all breakpoints.
|
39
|
-
break --show 2 Show details about breakpoint #2.
|
40
|
-
BANNER
|
41
|
-
|
42
|
-
def options(opt)
|
43
|
-
defaults = { argument: true, as: Integer }
|
44
|
-
|
45
|
-
opt.on :c, :condition, 'Change condition of a breakpoint.', defaults
|
46
|
-
opt.on :s, :show, 'Show breakpoint details and source.', defaults
|
47
|
-
opt.on :D, :delete, 'Delete a breakpoint.', defaults
|
48
|
-
opt.on :d, :disable, 'Disable a breakpoint.', defaults
|
49
|
-
opt.on :e, :enable, 'Enable a disabled breakpoint.', defaults
|
50
|
-
opt.on :'disable-all', 'Disable all breakpoints.'
|
51
|
-
opt.on :'delete-all', 'Delete all breakpoints.'
|
52
|
-
end
|
53
|
-
|
54
|
-
def process
|
55
|
-
all = %w(condition show delete disable enable disable-all delete-all)
|
56
|
-
all.each do |option|
|
57
|
-
next unless opts.present?(option)
|
58
|
-
|
59
|
-
return send("process_#{option.gsub('-', '_')}")
|
60
|
-
end
|
61
|
-
|
62
|
-
new_breakpoint unless args.empty?
|
63
|
-
end
|
64
|
-
|
65
|
-
%w(delete disable enable).each do |command|
|
66
|
-
define_method(:"process_#{command}") do
|
67
|
-
breakpoints.send(command, opts[command])
|
68
|
-
run 'breakpoints'
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
%w(disable-all delete-all).each do |command|
|
73
|
-
method_name = command.gsub('-', '_')
|
74
|
-
define_method(:"process_#{method_name}") do
|
75
|
-
breakpoints.send(method_name)
|
76
|
-
run 'breakpoints'
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def process_show
|
81
|
-
print_full_breakpoint(breakpoints.find_by_id(opts[:show]))
|
82
|
-
end
|
83
|
-
|
84
|
-
def process_condition
|
85
|
-
expr = args.empty? ? nil : args.join(' ')
|
86
|
-
breakpoints.change(opts[:condition], expr)
|
87
|
-
end
|
88
|
-
|
89
|
-
def new_breakpoint
|
90
|
-
place = args.shift
|
91
|
-
condition = args.join(' ') if 'if' == args.shift
|
92
|
-
|
93
|
-
bp =
|
94
|
-
case place
|
95
|
-
when /^(\d+)$/
|
96
|
-
errmsg = 'Line number declaration valid only in a file context.'
|
97
|
-
PryByebug.check_file_context(target, errmsg)
|
98
|
-
|
99
|
-
file, lineno = target.eval('__FILE__'), Regexp.last_match[1].to_i
|
100
|
-
breakpoints.add_file(file, lineno, condition)
|
101
|
-
when /^(.+):(\d+)$/
|
102
|
-
file, lineno = Regexp.last_match[1], Regexp.last_match[2].to_i
|
103
|
-
breakpoints.add_file(file, lineno, condition)
|
104
|
-
when /^(.*)[.#].+$/ # Method or class name
|
105
|
-
if Regexp.last_match[1].strip.empty?
|
106
|
-
errmsg = 'Method name declaration valid only in a file context.'
|
107
|
-
PryByebug.check_file_context(target, errmsg)
|
108
|
-
place = target.eval('self.class.to_s') + place
|
109
|
-
end
|
110
|
-
breakpoints.add_method(place, condition)
|
111
|
-
else
|
112
|
-
fail(ArgumentError, 'Cannot identify arguments as breakpoint')
|
113
|
-
end
|
114
|
-
|
115
|
-
print_full_breakpoint(bp)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
alias_command 'breakpoint', 'break'
|
119
|
-
|
120
|
-
create_command 'breakpoints' do
|
121
|
-
description 'List defined breakpoints.'
|
122
|
-
|
123
|
-
banner <<-BANNER
|
124
|
-
Usage: breakpoints [OPTIONS]
|
125
|
-
Aliases: breaks
|
126
|
-
|
127
|
-
List registered breakpoints and their current status.
|
128
|
-
BANNER
|
129
|
-
|
130
|
-
def options(opt)
|
131
|
-
opt.on :v, :verbose, 'Print source around each breakpoint.'
|
132
|
-
end
|
133
|
-
|
134
|
-
def process
|
135
|
-
return bold_puts('No breakpoints defined.') if breakpoints.count == 0
|
136
|
-
|
137
|
-
if opts.verbose?
|
138
|
-
breakpoints.each { |b| print_full_breakpoint(b) }
|
139
|
-
else
|
140
|
-
print_breakpoints_header
|
141
|
-
breakpoints.each { |b| print_short_breakpoint(b) }
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
alias_command 'breaks', 'breakpoints'
|
146
|
-
|
147
|
-
helpers do
|
148
|
-
#
|
149
|
-
# Byebug's array of breakpoints.
|
150
|
-
#
|
151
|
-
def breakpoints
|
152
|
-
Byebug::Breakpoints
|
153
|
-
end
|
154
|
-
|
155
|
-
#
|
156
|
-
# Prints a message with bold font.
|
157
|
-
#
|
158
|
-
def bold_puts(msg)
|
159
|
-
output.puts(text.bold(msg))
|
160
|
-
end
|
161
|
-
|
162
|
-
#
|
163
|
-
# Print out full information about a breakpoint.
|
164
|
-
#
|
165
|
-
# Includes surrounding code at that point.
|
166
|
-
#
|
167
|
-
def print_full_breakpoint(br)
|
168
|
-
header = "Breakpoint #{br.id}:"
|
169
|
-
status = br.enabled? ? 'Enabled' : 'Disabled'
|
170
|
-
code = br.source_code.with_line_numbers.to_s
|
171
|
-
condition = br.expr ? "#{text.bold('Condition:')} #{br.expr}\n" : ''
|
172
|
-
|
173
|
-
output.puts <<-EOP.gsub(/ {8}/, '')
|
174
|
-
|
175
|
-
#{text.bold(header)} #{br} (#{status}) #{condition}
|
176
|
-
|
177
|
-
#{code}
|
178
|
-
|
179
|
-
EOP
|
180
|
-
end
|
181
|
-
|
182
|
-
#
|
183
|
-
# Print out concise information about a breakpoint.
|
184
|
-
#
|
185
|
-
def print_short_breakpoint(breakpoint)
|
186
|
-
id = format('%*d', max_width, breakpoint.id)
|
187
|
-
status = breakpoint.enabled? ? 'Yes' : 'No'
|
188
|
-
expr = breakpoint.expr ? breakpoint.expr : ''
|
189
|
-
|
190
|
-
output.puts(" #{id} #{status} #{breakpoint} #{expr}")
|
191
|
-
end
|
192
|
-
|
193
|
-
#
|
194
|
-
# Prints a header for the breakpoint list.
|
195
|
-
#
|
196
|
-
def print_breakpoints_header
|
197
|
-
header = "#{' ' * (max_width - 1)}# Enabled At "
|
198
|
-
|
199
|
-
output.puts <<-EOP.gsub(/ {8}/, '')
|
200
|
-
|
201
|
-
#{text.bold(header)}
|
202
|
-
#{text.bold('-' * header.size)}
|
203
|
-
EOP
|
204
|
-
end
|
205
|
-
|
206
|
-
#
|
207
|
-
# Max width of breakpoints id column
|
208
|
-
#
|
209
|
-
def max_width
|
210
|
-
::Byebug.breakpoints.last.id.to_s.length
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
Pry.commands.import(BreakpointCommands)
|
216
|
-
end
|