pry-debugger 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,10 @@
1
+ ## 0.2.0 (2012-06-11)
2
+
3
+ # Breakpoints.
4
+ * **finish** command.
5
+ * Internal cleanup and bug fixes.
6
+
7
+
1
8
  ## 0.1.0 (2012-06-07)
2
9
 
3
10
  * First release. **step**, **next**, and **continue** commands.
data/README.md CHANGED
@@ -3,10 +3,10 @@ pry-debugger
3
3
 
4
4
  _Fast execution control in Pry_
5
5
 
6
- Adds **step**, **next**, and **continue** commands to [Pry][pry] using
7
- [debugger][debugger].
6
+ Adds **step**, **next**, **finish**, and **continue** commands and
7
+ **breakpoints** to [Pry][pry] using [debugger][debugger].
8
8
 
9
- To use, invoke pry normally:
9
+ To use, invoke pry normally. No need to start your script or app differently.
10
10
 
11
11
  ```ruby
12
12
  def some_method
@@ -15,40 +15,128 @@ def some_method
15
15
  end
16
16
  ```
17
17
 
18
+ For a complete debugging environment, add
19
+ [pry-stack_explorer][pry-stack_explorer] for call-stack frame navigation.
20
+
21
+
22
+ ## Execution Commands
23
+
24
+ **step:** Step execution into the next line or method. Takes an optional numeric
25
+ argument to step multiple times.
26
+
27
+ **next:** Step over to the next line within the same frame. Also takes an
28
+ optional numeric argument to step multiple lines.
29
+
30
+ **finish:** Execute until current stack frame returns.
31
+
32
+ **continue:** Continue program execution and end the Pry session.
33
+
34
+
35
+ ## Breakpoints
36
+
37
+ You can set and adjust breakpoints directly from a Pry session using the
38
+ following commands:
39
+
40
+ **break:** Set a new breakpoint from a line number in the current file, a file
41
+ and line number, or a method. Pass an optional expression to create a
42
+ conditional breakpoint. Edit existing breakpoints via various flags.
43
+
44
+ Examples:
45
+
46
+ ```
47
+ break SomeClass#run Break at the start of `SomeClass#run`.
48
+ break Foo#bar if baz? Break at `Foo#bar` only if `baz?`.
49
+ break app/models/user.rb:15 Break at line 15 in user.rb.
50
+ break 14 Break at line 14 in the current file.
51
+
52
+ break --condition 4 x > 2 Change condition on breakpoint #4 to 'x > 2'.
53
+ break --condition 3 Remove the condition on breakpoint #3.
54
+
55
+ break --delete 5 Delete breakpoint #5.
56
+ break --disable-all Disable all breakpoints.
57
+
58
+ break List all breakpoints. (Same as `breakpoints`)
59
+ break --show 2 Show details about breakpoint #2.
60
+ ```
61
+
62
+ Type `break --help` from a Pry session to see all available options.
63
+
64
+
65
+ **breakpoints**: List all defined breakpoints. Pass `-v` or `--verbose` to see
66
+ the source code around each breakpoint.
67
+
68
+
69
+ ## Caveats
70
+
18
71
  **pry-debugger** is not yet thread-safe, so only use in single-threaded
19
72
  environments.
20
73
 
21
- Only supports MRI 1.9.2 and 1.9.3. For a pure-ruby approach not reliant on
74
+ Only supports MRI 1.9.2 and 1.9.3. For a pure ruby approach not reliant on
22
75
  [debugger][debugger], check out [pry-nav][pry-nav]. Note: *pry-nav* and
23
76
  *pry-debugger* cannot be loaded together.
24
77
 
78
+
79
+ ## Remote debugging
80
+
25
81
  Support for [pry-remote][pry-remote] (>= 0.1.4) is also included. Requires
26
- explicity requiring pry-nav, not just relying on pry's plugin loader. For
27
- example, in a Gemfile:
82
+ explicity requiring *pry-debugger*, not just relying on pry's plugin loader.
83
+
84
+ Want to debug a Rails app running inside [foreman][foreman]? Add to your
85
+ Gemfile:
28
86
 
29
87
  ```ruby
30
88
  gem 'pry'
31
- gem 'pry-nav'
89
+ gem 'pry-remote'
90
+ gem 'pry-stack_explorer'
91
+ gem 'pry-debugger'
92
+ ```
93
+
94
+ Then add `binding.remote_pry` where you want to pause:
95
+
96
+ ```ruby
97
+ class UsersController < ApplicationController
98
+ def index
99
+ binding.remote_pry
100
+ ...
101
+ end
102
+ end
103
+ ```
104
+
105
+ Load a page that triggers the code. Connect to the session:
106
+
107
+ ```
108
+ $ bundle exec pry-remote
32
109
  ```
33
110
 
111
+ Using Pry with Rails? Check out [Jazz Hands][jazz_hands].
112
+
113
+
114
+ ## Tips
115
+
34
116
  Stepping through code often? Add the following shortcuts to `~/.pryrc`:
35
117
 
36
118
  ```ruby
37
119
  Pry.commands.alias_command 'c', 'continue'
38
120
  Pry.commands.alias_command 's', 'step'
39
121
  Pry.commands.alias_command 'n', 'next'
122
+ Pry.commands.alias_command 'f', 'finish'
40
123
  ```
41
124
 
125
+
42
126
  ## Contributions
43
127
 
44
128
  Patches and bug reports are welcome. Just send a [pull request][pullrequests] or
45
129
  file an [issue][issues]. [Project changelog][changelog].
46
130
 
47
131
 
48
- [pry]: http://pry.github.com
49
- [debugger]: https://github.com/cldwalker/debugger
50
- [pry-nav]: https://github.com/nixme/pry-nav
51
- [pry-remote]: https://github.com/Mon-Ouie/pry-remote
52
- [pullrequests]: https://github.com/nixme/pry-debugger/pulls
53
- [issues]: https://github.com/nixme/pry-debugger/issues
54
- [changelog]: https://github.com/nixme/pry-debugger/blob/master/CHANGELOG.md
132
+
133
+ [pry]: http://pry.github.com
134
+ [debugger]: https://github.com/cldwalker/debugger
135
+ [pry-stack_explorer]: https://github.com/pry/pry-stack_explorer
136
+ [pry-nav]: https://github.com/nixme/pry-nav
137
+ [pry-remote]: https://github.com/Mon-Ouie/pry-remote
138
+ [foreman]: https://github.com/ddollar/foreman
139
+ [jazz_hands]: https://github.com/nixme/jazz_hands
140
+ [pullrequests]: https://github.com/nixme/pry-debugger/pulls
141
+ [issues]: https://github.com/nixme/pry-debugger/issues
142
+ [changelog]: https://github.com/nixme/pry-debugger/blob/master/CHANGELOG.md
@@ -0,0 +1,83 @@
1
+ module PryDebugger
2
+
3
+ # Wrapper for Debugger.breakpoints that respects our Processor and has better
4
+ # failure behavior. Acts as an Enumerable.
5
+ #
6
+ module Breakpoints
7
+ extend Enumerable
8
+ extend self
9
+
10
+
11
+ # Add a new breakpoint.
12
+ def add(file, line, expression = nil)
13
+ raise ArgumentError, 'Invalid file!' unless File.exist?(file)
14
+ Pry.processor.debugging = true
15
+ Debugger.add_breakpoint(File.expand_path(file), line, expression)
16
+ end
17
+
18
+ # Change the conditional expression for a breakpoint.
19
+ def change(id, expression = nil)
20
+ breakpoint = find_by_id(id)
21
+ breakpoint.expr = expression
22
+ breakpoint
23
+ end
24
+
25
+ # Delete an existing breakpoint with the given ID.
26
+ def delete(id)
27
+ unless Debugger.started? && Debugger.remove_breakpoint(id)
28
+ raise ArgumentError, "No breakpoint ##{id}"
29
+ end
30
+ Pry.processor.debugging = false if to_a.empty?
31
+ end
32
+
33
+ # Delete all breakpoints.
34
+ def clear
35
+ Debugger.breakpoints.clear if Debugger.started?
36
+ Pry.processor.debugging = false
37
+ end
38
+
39
+ # Enable a disabled breakpoint with the given ID.
40
+ def enable(id)
41
+ change_status id, true
42
+ end
43
+
44
+ # Disable a breakpoint with the given ID.
45
+ def disable(id)
46
+ change_status id, false
47
+ end
48
+
49
+ # Disable all breakpoints.
50
+ def disable_all
51
+ each do |breakpoint|
52
+ breakpoint.enabled = false
53
+ end
54
+ end
55
+
56
+ def to_a
57
+ Debugger.started? ? Debugger.breakpoints : []
58
+ end
59
+
60
+ def size
61
+ to_a.size
62
+ end
63
+
64
+ def each(&block)
65
+ to_a.each(&block)
66
+ end
67
+
68
+ def find_by_id(id)
69
+ breakpoint = find { |b| b.id == id }
70
+ raise ArgumentError, "No breakpoint ##{id}!" unless breakpoint
71
+ breakpoint
72
+ end
73
+
74
+
75
+ private
76
+
77
+ def change_status(id, enabled = true)
78
+ breakpoint = find_by_id(id)
79
+ breakpoint.enabled = enabled
80
+ breakpoint
81
+ end
82
+ end
83
+ end
@@ -1,28 +1,215 @@
1
1
  require 'pry'
2
+ require 'pry-debugger/breakpoints'
2
3
 
3
4
  module PryDebugger
4
5
  Commands = Pry::CommandSet.new do
5
- block_command 'step', 'Step execution into the next line or method.' do |steps|
6
- check_file_context
7
- breakout_navigation :step, steps
6
+ create_command 'step' do
7
+ description 'Step execution into the next line or method.'
8
+
9
+ banner <<-BANNER
10
+ Usage: step [TIMES]
11
+
12
+ Step execution forward. By default, moves a single step.
13
+
14
+ Examples:
15
+
16
+ step Move a single step forward.
17
+ step 5 Execute the next 5 steps.
18
+ BANNER
19
+
20
+ def process
21
+ check_file_context
22
+ breakout_navigation :step, args.first
23
+ end
24
+ end
25
+
26
+
27
+ create_command 'next' do
28
+ description 'Execute the next line within the current stack frame.'
29
+
30
+ banner <<-BANNER
31
+ Usage: next [LINES]
32
+
33
+ Step over within the same frame. By default, moves forward a single
34
+ line.
35
+
36
+ Examples:
37
+
38
+ next Move a single line forward.
39
+ next 4 Execute the next 4 lines.
40
+ BANNER
41
+
42
+ def process
43
+ check_file_context
44
+ breakout_navigation :next, args.first
45
+ end
8
46
  end
9
47
 
10
- block_command 'next', 'Execute the next line within the same stack frame.' do |lines|
11
- check_file_context
12
- breakout_navigation :next, lines
48
+
49
+ create_command 'finish' do
50
+ description 'Execute until current stack frame returns.'
51
+
52
+ def process
53
+ check_file_context
54
+ breakout_navigation :finish
55
+ end
13
56
  end
14
57
 
15
- block_command 'continue', 'Continue program execution and end the Pry session.' do
16
- check_file_context
17
- run 'exit-all'
58
+
59
+ create_command 'continue' do
60
+ description 'Continue program execution and end the Pry session.'
61
+
62
+ def process
63
+ check_file_context
64
+ run 'exit-all'
65
+ end
18
66
  end
19
67
 
68
+
69
+ create_command 'break' do
70
+ description 'Set or edit a breakpoint.'
71
+
72
+ banner <<-BANNER
73
+ Usage: break <METHOD | FILE:LINE | LINE> [if CONDITION]
74
+ break --condition N [CONDITION]
75
+ break [--show | --delete | --enable | --disable] N
76
+ break [--delete-all | --disable-all]
77
+ Aliases: breakpoint
78
+
79
+ Set a breakpoint. Accepts a line number in the current file, a file and
80
+ line number, or a method, and an optional condition.
81
+
82
+ Pass appropriate flags to manipulate existing breakpoints.
83
+
84
+ Examples:
85
+
86
+ break SomeClass#run Break at the start of `SomeClass#run`.
87
+ break Foo#bar if baz? Break at `Foo#bar` only if `baz?`.
88
+ break app/models/user.rb:15 Break at line 15 in user.rb.
89
+ break 14 Break at line 14 in the current file.
90
+
91
+ break --condition 4 x > 2 Add/change condition on breakpoint #4.
92
+ break --condition 3 Remove the condition on breakpoint #3.
93
+
94
+ break --delete 5 Delete breakpoint #5.
95
+ break --disable-all Disable all breakpoints.
96
+
97
+ break List all breakpoints. (Same as `breakpoints`)
98
+ break --show 2 Show details about breakpoint #2.
99
+ BANNER
100
+
101
+ def options(opt)
102
+ opt.on :c, :condition, 'Change the condition of a breakpoint.', :argument => true, :as => Integer
103
+ opt.on :s, :show, 'Show breakpoint details and source.', :argument => true, :as => Integer
104
+ opt.on :D, :delete, 'Delete a breakpoint.', :argument => true, :as => Integer
105
+ opt.on :d, :disable, 'Disable a breakpoint.', :argument => true, :as => Integer
106
+ opt.on :e, :enable, 'Enable a disabled breakpoint.', :argument => true, :as => Integer
107
+ opt.on :'disable-all', 'Disable all breakpoints.'
108
+ opt.on :'delete-all', 'Delete all breakpoints.'
109
+ method_options(opt)
110
+ end
111
+
112
+ def process
113
+ Pry.processor.pry = _pry_
114
+
115
+ { :delete => :delete,
116
+ :disable => :disable,
117
+ :enable => :enable,
118
+ :'disable-all' => :disable_all,
119
+ :'delete-all' => :clear
120
+ }.each do |action, method|
121
+ if opts.present?(action)
122
+ Breakpoints.__send__ method, *(method == action ? [opts[action]] : [])
123
+ return run 'breakpoints'
124
+ end
125
+ end
126
+
127
+ if opts.present?(:condition)
128
+ Breakpoints.change(opts[:condition], args.empty? ? nil : args.join(' '))
129
+ run 'breakpoints'
130
+ elsif opts.present?(:show)
131
+ print_full_breakpoint Breakpoints.find_by_id(opts[:show])
132
+ elsif args.empty?
133
+ run 'breakpoints'
134
+ else
135
+ new_breakpoint
136
+ end
137
+ end
138
+
139
+ def new_breakpoint
140
+ place = args.shift
141
+ condition = args.join(' ') if 'if' == args.shift
142
+
143
+ file, line =
144
+ case place
145
+ when /(\d+)/ # Line number only
146
+ line = $1
147
+ unless PryDebugger.check_file_context(target)
148
+ raise ArgumentError, 'Line number declaration valid only in a file context.'
149
+ end
150
+ [target.eval('__FILE__'), line]
151
+ when /(.+):(\d+)/ # File and line number
152
+ [$1, $2]
153
+ else # Method or class name
154
+ self.args = [place]
155
+ method_object.source_location
156
+ end
157
+
158
+ print_full_breakpoint Breakpoints.add(file, line.to_i, condition)
159
+ end
160
+ end
161
+ alias_command 'breakpoint', 'break'
162
+
163
+
164
+ create_command 'breakpoints' do
165
+ description 'List defined breakpoints.'
166
+
167
+ banner <<-BANNER
168
+ Usage: breakpoints [OPTIONS]
169
+ Aliases: breaks
170
+
171
+ List registered breakpoints and their current status.
172
+ BANNER
173
+
174
+ def options(opt)
175
+ opt.on :v, :verbose, 'Print source around each breakpoint.'
176
+ end
177
+
178
+ def process
179
+ if Breakpoints.count > 0
180
+ if opts.verbose? # Long-form with source output
181
+ Breakpoints.each { |b| print_full_breakpoint(b) }
182
+ else # Simple table output
183
+ max_width = [Math.log10(Breakpoints.count).ceil, 1].max
184
+ header = "#{' ' * (max_width - 1)}# Enabled At "
185
+
186
+ output.puts
187
+ output.puts text.bold(header)
188
+ output.puts text.bold('-' * header.size)
189
+ Breakpoints.each do |breakpoint|
190
+ output.printf "%#{max_width}d ", breakpoint.id
191
+ output.print breakpoint.enabled? ? 'Yes ' : 'No '
192
+ output.print "#{breakpoint.source}:#{breakpoint.pos}"
193
+ output.print " (if #{breakpoint.expr})" if breakpoint.expr
194
+ output.puts
195
+ end
196
+ output.puts
197
+ end
198
+ else
199
+ output.puts text.bold('No breakpoints defined.')
200
+ end
201
+ end
202
+ end
203
+ alias_command 'breaks', 'breakpoints'
204
+
205
+
20
206
  helpers do
21
- def breakout_navigation(action, times)
207
+ def breakout_navigation(action, times = nil)
22
208
  _pry_.binding_stack.clear # Clear the binding stack.
23
209
  throw :breakout_nav, { # Break out of the REPL loop and
24
210
  :action => action, # signal the tracer.
25
- :times => times
211
+ :times => times,
212
+ :pry => _pry_
26
213
  }
27
214
  end
28
215
 
@@ -32,6 +219,25 @@ module PryDebugger
32
219
  raise Pry::CommandError, 'Cannot find local context. Did you use `binding.pry`?'
33
220
  end
34
221
  end
222
+
223
+ # Print out full information about a breakpoint including surrounding code
224
+ # at that point.
225
+ def print_full_breakpoint(breakpoint)
226
+ line = breakpoint.pos
227
+ output.print text.bold("Breakpoint #{breakpoint.id}: ")
228
+ output.print "#{breakpoint.source} @ line #{line} "
229
+ output.print breakpoint.enabled? ? '(Enabled)' : '(Disabled)'
230
+ output.puts ' :'
231
+ if (expr = breakpoint.expr)
232
+ output.puts "#{text.bold('Condition:')} #{expr}"
233
+ end
234
+ output.puts
235
+ output.puts Pry::Code.from_file(breakpoint.source).
236
+ around(line, 3).
237
+ with_line_numbers.
238
+ with_marker(line).to_s
239
+ output.puts
240
+ end
35
241
  end
36
242
  end
37
243
  end
@@ -3,12 +3,16 @@ require 'debugger'
3
3
 
4
4
  module PryDebugger
5
5
  class Processor
6
- def initialize(pry_start_options = {}, &block)
6
+ attr_accessor :pry
7
+
8
+ def initialize
7
9
  Debugger.handler = self
8
- @pry_start_options = pry_start_options
10
+ @always_enabled = false
11
+ @delayed = Hash.new(0)
9
12
  end
10
13
 
11
- def run(&block)
14
+ # Wrap a Pry REPL to catch navigational commands and act on them.
15
+ def run(initial = true, &block)
12
16
  return_value = nil
13
17
  command = catch(:breakout_nav) do # Throws from PryDebugger::Commands
14
18
  return_value = yield
@@ -18,41 +22,86 @@ module PryDebugger
18
22
  times = (command[:times] || 1).to_i # Command argument
19
23
  times = 1 if times <= 0
20
24
 
21
- remote = @pry_start_options[:pry_remote] && PryDebugger.current_remote_server
22
-
23
- if [:step, :next].include? command[:action]
24
- Debugger.start
25
- if Debugger.current_context.frame_self.is_a? Debugger::Context
26
- # The first binding.pry call will have a frame inside Debugger. If we
27
- # step normally, it'll stop inside this Processor instead. So jump it
28
- # out to the above frame.
29
- #
30
- # TODO: times isn't respected
31
- Debugger.current_context.stop_frame = 1 # (remote ? 2 : 1)
32
- else
33
- if :next == command[:action]
34
- Debugger.current_context.step_over(times, 0)
35
- else # step
36
- Debugger.current_context.step(times)
37
- end
25
+ if [:step, :next, :finish].include? command[:action]
26
+ @pry = command[:pry] # Pry instance to resume after stepping
27
+ Debugger.start unless Debugger.started?
28
+
29
+ if initial
30
+ # Movement when on the initial binding.pry line will have a frame
31
+ # inside Debugger. If we step normally, it'll stop inside this
32
+ # Processor. So jump out and stop at the above frame, then step/next
33
+ # from our callback.
34
+ Debugger.current_context.stop_frame = 1
35
+ @delayed[command[:action]] = times
36
+
37
+ elsif :next == command[:action]
38
+ step_over times
39
+
40
+ elsif :step == command[:action]
41
+ step times
42
+
43
+ elsif :finish == command[:action]
44
+ finish
38
45
  end
39
- elsif remote # Continuing execution... cleanup DRb remote if running
40
- PryDebugger.current_remote_server.teardown
46
+ else
47
+ stop
41
48
  end
42
49
 
43
50
  return_value
44
51
  end
45
52
 
53
+ # Adjust debugging. When set to false, the Processor will manage enabling
54
+ # and disabling the debugger itself. When set to true, the debugger is
55
+ # always enabled.
56
+ def debugging=(enabled)
57
+ if enabled
58
+ @always_enabled = true
59
+ Debugger.start unless Debugger.started?
60
+ else
61
+ @always_enabled = false
62
+ # Debugger will get stopped if necessary in `stop` once the repl ends.
63
+ end
64
+ end
65
+
46
66
 
47
67
  # --- Callbacks from debugger C extension ---
48
68
 
49
69
  def at_line(context, file, line)
50
70
  return if file && TRACE_IGNORE_FILES.include?(File.expand_path(file))
51
- start_pry context
71
+
72
+ # If stopped for a breakpoint or catchpoint, can't play any delayed steps
73
+ # as they'll move away from the interruption point. (Unsure if scenario is
74
+ # possible, but just keeping assertions in check.)
75
+ @delayed = Hash.new(0) unless :step == context.stop_reason
76
+
77
+ if @delayed[:next] > 1 # If any delayed nexts/steps, do 'em.
78
+ step_over @delayed[:next] - 1
79
+ @delayed = Hash.new(0)
80
+
81
+ elsif @delayed[:step] > 1
82
+ step @delayed[:step] - 1
83
+ @delayed = Hash.new(0)
84
+
85
+ elsif @delayed[:finish] > 0
86
+ finish
87
+ @delayed = Hash.new(0)
88
+
89
+ else # Otherwise, resume the pry session at the stopped line.
90
+ resume_pry context
91
+ end
52
92
  end
53
93
 
94
+ # Called when a breakpoint is triggered. Note: `at_line`` is called
95
+ # immediately after with the context's `stop_reason == :breakpoint`.
54
96
  def at_breakpoint(context, breakpoint)
55
- # TODO
97
+ @pry.output.print Pry::Helpers::Text.bold("\nBreakpoint #{breakpoint.id}. ")
98
+ @pry.output.puts (breakpoint.hit_count == 1 ?
99
+ 'First hit.' :
100
+ "Hit #{breakpoint.hit_count} times." )
101
+ if (expr = breakpoint.expr)
102
+ @pry.output.print Pry::Helpers::Text.bold("Condition: ")
103
+ @pry.output.puts expr
104
+ end
56
105
  end
57
106
 
58
107
  def at_catchpoint(context, exception)
@@ -62,8 +111,39 @@ module PryDebugger
62
111
 
63
112
  private
64
113
 
65
- def start_pry(context)
66
- Pry.start(context.frame_binding(0), @pry_start_options)
114
+ # Resume an existing Pry REPL at the paused point. Binding extracted from
115
+ # the Debugger::Context.
116
+ def resume_pry(context)
117
+ new_binding = context.frame_binding(0)
118
+ Debugger.stop unless @always_enabled
119
+
120
+ @pry.binding_stack.clear
121
+ run(false) do
122
+ @pry.repl new_binding
123
+ end
124
+ end
125
+
126
+ # Move execution forward.
127
+ def step(times)
128
+ Debugger.current_context.step(times)
129
+ end
130
+
131
+ # Move execution forward a number of lines in the same frame.
132
+ def step_over(lines)
133
+ Debugger.current_context.step_over(lines, 0)
134
+ end
135
+
136
+ # Execute until current frame returns.
137
+ def finish
138
+ Debugger.current_context.stop_frame = 0
139
+ end
140
+
141
+ # Cleanup when debugging is stopped and execution continues.
142
+ def stop
143
+ Debugger.stop if !@always_enabled && Debugger.started?
144
+ if PryDebugger.current_remote_server # Cleanup DRb remote if running
145
+ PryDebugger.current_remote_server.teardown
146
+ end
67
147
  end
68
148
  end
69
149
  end
@@ -3,19 +3,20 @@ require 'pry-debugger/processor'
3
3
 
4
4
  class << Pry
5
5
  alias_method :start_existing, :start
6
+ attr_reader :processor
6
7
 
7
8
  def start(target = TOPLEVEL_BINDING, options = {})
8
- old_options = options.reject { |k, _| k == :pry_remote }
9
+ @processor ||= PryDebugger::Processor.new
9
10
 
10
11
  if target.is_a?(Binding) && PryDebugger.check_file_context(target)
11
12
  # Wrap the processer around the usual Pry.start to catch navigation
12
13
  # commands.
13
- PryDebugger::Processor.new(options).run do
14
- start_existing(target, old_options)
14
+ @processor.run(true) do
15
+ start_existing(target, options)
15
16
  end
16
17
  else
17
18
  # No need for the tracer unless we have a file context to step through
18
- start_existing(target, old_options)
19
+ start_existing(target, options)
19
20
  end
20
21
  end
21
22
  end
@@ -2,9 +2,8 @@ require 'pry-remote'
2
2
 
3
3
  module PryRemote
4
4
  class Server
5
- # Override the call to Pry.start to save off current Server, pass a
6
- # pry_remote flag so pry-debugger knows this is a remote session, and not
7
- # kill the server right away.
5
+ # Override the call to Pry.start to save off current Server, and not
6
+ # teardown the server right after Pry.start finishes.
8
7
  def run
9
8
  if PryDebugger.current_remote_server
10
9
  raise 'Already running a pry-remote session!'
@@ -15,8 +14,7 @@ module PryRemote
15
14
  setup
16
15
  Pry.start @object, {
17
16
  :input => client.input_proxy,
18
- :output => client.output,
19
- :pry_remote => true
17
+ :output => client.output
20
18
  }
21
19
  end
22
20
 
@@ -1,3 +1,3 @@
1
1
  module PryDebugger
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pry-debugger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-07 00:00:00.000000000 Z
12
+ date: 2012-06-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pry
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &70204822544220 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,15 +21,10 @@ dependencies:
21
21
  version: 0.9.9
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: 0.9.9
24
+ version_requirements: *70204822544220
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: debugger
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &70204822543060 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ~>
@@ -37,15 +32,10 @@ dependencies:
37
32
  version: 1.1.3
38
33
  type: :runtime
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 1.1.3
35
+ version_requirements: *70204822543060
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: pry-remote
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &70204822541940 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ~>
@@ -53,12 +43,7 @@ dependencies:
53
43
  version: 0.1.4
54
44
  type: :development
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: 0.1.4
46
+ version_requirements: *70204822541940
62
47
  description: Combine 'pry' with 'debugger'. Adds 'step', 'next', and 'continue' commands
63
48
  to control execution.
64
49
  email: nixme@stillhope.com
@@ -74,6 +59,7 @@ files:
74
59
  - Rakefile
75
60
  - lib/pry-debugger.rb
76
61
  - lib/pry-debugger/base.rb
62
+ - lib/pry-debugger/breakpoints.rb
77
63
  - lib/pry-debugger/cli.rb
78
64
  - lib/pry-debugger/commands.rb
79
65
  - lib/pry-debugger/processor.rb
@@ -102,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
88
  version: '0'
103
89
  requirements: []
104
90
  rubyforge_project:
105
- rubygems_version: 1.8.23
91
+ rubygems_version: 1.8.11
106
92
  signing_key:
107
93
  specification_version: 3
108
94
  summary: Fast debugging with Pry.