ruby-debug-ide 0.6.1.beta8 → 0.6.1.beta9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a74a2dbac3d18cf49bd2358b17bec396e0f56132
4
- data.tar.gz: 1320ff44faab25776a1fed25921687f029a395af
3
+ metadata.gz: a2852711026ba805b67c3c434639bafe781c94fb
4
+ data.tar.gz: 67501296e2f294e1c9cb3295cef40004d628593f
5
5
  SHA512:
6
- metadata.gz: 767971a4b4a68bcf4daa925e7bdfc09a78a531d47a6780ebd697adb727ea4f6d11175c0957b33739bbb284f207084686833ec9078a097c2d8c1c6fe400b6a600
7
- data.tar.gz: 664dd472e6e8672e3fb4e1d71be8b5be9a4af3bab4011c1ea0d43dd668a11327015bfe83c3852f602c1ae3716fd3ae273d779f1536d271d03b8a1327cf0c9966
6
+ metadata.gz: 164dea0a96937cd8cfa702141ff3320e7c4b85469d9c26212774a8865ba21253d7560ec448ab6bb5da0d34fe760811b5a8447a0fb25ac4ce37b255a480aff473
7
+ data.tar.gz: 42999728cea96ed4e609acc8c51e3e37f2f3d3db96e7790c36c886da4260219e52eb7611aa658f2015c973859f19ba90bf4ac693943860da67cf1617ab6fb5b1
@@ -11,20 +11,20 @@ end
11
11
  $stdout.sync=true
12
12
 
13
13
  options = OpenStruct.new(
14
- 'frame_bind' => false,
15
- 'host' => nil,
16
- 'load_mode' => false,
17
- 'port' => 1234,
18
- 'stop' => false,
19
- 'tracing' => false,
20
- 'int_handler' => true,
21
- 'dispatcher_port' => -1,
22
- 'evaluation_timeout' => 10,
23
- 'rm_protocol_extensions' => false,
24
- 'catchpoint_deleted_event' => false,
25
- 'value_as_nested_element' => false,
26
- 'attach_mode' => false,
27
- 'cli_debug' => false
14
+ 'frame_bind' => false,
15
+ 'host' => nil,
16
+ 'load_mode' => false,
17
+ 'port' => 1234,
18
+ 'stop' => false,
19
+ 'tracing' => false,
20
+ 'int_handler' => true,
21
+ 'dispatcher_port' => -1,
22
+ 'evaluation_timeout' => 10,
23
+ 'rm_protocol_extensions' => false,
24
+ 'catchpoint_deleted_event' => false,
25
+ 'value_as_nested_element' => false,
26
+ 'attach_mode' => false,
27
+ 'cli_debug' => false
28
28
  )
29
29
 
30
30
  opts = OptionParser.new do |opts|
@@ -36,20 +36,25 @@ Usage: rdebug-ide is supposed to be called from RDT, NetBeans, RubyMine, or
36
36
  EOB
37
37
  opts.separator ""
38
38
  opts.separator "Options:"
39
-
39
+
40
+ Debugger.trace_to_s = false
41
+ opts.on("--evaluation-control", "trace to_s evaluation") do
42
+ Debugger.trace_to_s = true
43
+ end
44
+
40
45
  ENV['DEBUGGER_MEMORY_LIMIT'] = '10'
41
- opts.on("-m", "--memory-limit LIMIT", Integer, "evaluation memory limit in mb (default: 10)") do |limit|
42
- ENV['DEBUGGER_MEMORY_LIMIT'] = limit
46
+ opts.on("-m", "--memory-limit LIMIT", Integer, "evaluation memory limit in mb (default: 10)") do |limit|
47
+ ENV['DEBUGGER_MEMORY_LIMIT'] = limit.to_s
43
48
  end
44
-
49
+
45
50
  ENV['INSPECT_TIME_LIMIT'] = '100'
46
- opts.on("-t", "--time-limit LIMIT", Integer, "evaluation time limit in milliseconds (default: 100)") do |limit|
47
- ENV['INSPECT_TIME_LIMIT'] = limit
51
+ opts.on("-t", "--time-limit LIMIT", Integer, "evaluation time limit in milliseconds (default: 100)") do |limit|
52
+ ENV['INSPECT_TIME_LIMIT'] = limit.to_s
48
53
  end
49
54
 
50
55
  opts.on("-h", "--host HOST", "Host name used for remote debugging") {|host| options.host = host}
51
56
  opts.on("-p", "--port PORT", Integer, "Port used for remote debugging") {|port| options.port = port}
52
- opts.on("--dispatcher-port PORT", Integer, "Port used for multi-process debugging dispatcher") do |dp|
57
+ opts.on("--dispatcher-port PORT", Integer, "Port used for multi-process debugging dispatcher") do |dp|
53
58
  options.dispatcher_port = dp
54
59
  end
55
60
  opts.on('--evaluation-timeout TIMEOUT', Integer,'evaluation timeout in seconds (default: 10)') do |timeout|
@@ -133,7 +138,7 @@ if options.dispatcher_port != -1
133
138
  end
134
139
  Debugger::MultiProcess.do_monkey
135
140
 
136
- ENV['DEBUGGER_STORED_RUBYLIB'] = ENV['RUBYLIB']
141
+ ENV['DEBUGGER_STORED_RUBYLIB'] = ENV['RUBYLIB']
137
142
  old_opts = ENV['RUBYOPT'] || ''
138
143
  starter = "-r#{File.expand_path(File.dirname(__FILE__))}/../lib/ruby-debug-ide/multiprocess/starter"
139
144
  unless old_opts.include? starter
@@ -29,22 +29,22 @@ module Debugger
29
29
  end
30
30
 
31
31
  def cleanup_backtrace(backtrace)
32
- cleared = []
33
- return cleared unless backtrace
34
- backtrace.each do |line|
35
- if line.index(File.expand_path(File.dirname(__FILE__) + "/..")) == 0
36
- next
37
- end
38
- if line.index("-e:1") == 0
39
- break
40
- end
41
- cleared << line
42
- end
43
- cleared
32
+ cleared = []
33
+ return cleared unless backtrace
34
+ backtrace.each do |line|
35
+ if line.index(File.expand_path(File.dirname(__FILE__) + "/..")) == 0
36
+ next
37
+ end
38
+ if line.index("-e:1") == 0
39
+ break
40
+ end
41
+ cleared << line
42
+ end
43
+ cleared
44
44
  end
45
45
 
46
46
  attr_accessor :attached
47
- attr_accessor :cli_debug, :xml_debug, :evaluation_timeout
47
+ attr_accessor :cli_debug, :xml_debug, :evaluation_timeout, :trace_to_s
48
48
  attr_accessor :control_thread
49
49
  attr_reader :interface
50
50
  # protocol extensions
@@ -1,3 +1,3 @@
1
1
  module Debugger
2
- IDE_VERSION='0.6.1.beta8'
2
+ IDE_VERSION='0.6.1.beta9'
3
3
  end
@@ -13,21 +13,29 @@ module Debugger
13
13
  SPECIAL_SYMBOL_MESSAGE = lambda {|e| '<?>'}
14
14
  end
15
15
 
16
- class ExecError < StandardError
16
+ class ExecError
17
17
  attr_reader :message
18
- attr_reader :trace_point
19
18
  attr_reader :backtrace
20
19
 
21
- def initialize(message, trace_point, backtrace = [])
20
+ def initialize(message, backtrace = [])
22
21
  @message = message
23
- @trace_point = trace_point
24
22
  @backtrace = backtrace
25
23
  end
26
24
  end
27
25
 
28
- class MemoryLimitError < ExecError; end
26
+ class SimpleTimeLimitError < StandardError
27
+ attr_reader :message
28
+
29
+ def initialize(message)
30
+ @message = message
31
+ end
32
+ end
33
+
34
+ class MemoryLimitError < ExecError;
35
+ end
29
36
 
30
- class TimeLimitError < ExecError; end
37
+ class TimeLimitError < ExecError;
38
+ end
31
39
 
32
40
  class XmlPrinter # :nodoc:
33
41
  class ExceptionProxy
@@ -163,48 +171,76 @@ module Debugger
163
171
  end
164
172
  end
165
173
 
174
+ def exec_with_timeout(sec, error_message)
175
+ return yield if sec == nil or sec.zero?
176
+ if Thread.respond_to?(:critical) and Thread.critical
177
+ raise ThreadError, "timeout within critical session"
178
+ end
179
+ begin
180
+ x = Thread.current
181
+ y = DebugThread.start {
182
+ sleep sec
183
+ x.raise SimpleTimeLimitError.new(error_message) if x.alive?
184
+ }
185
+ yield sec
186
+ ensure
187
+ y.kill if y and y.alive?
188
+ end
189
+ end
190
+
166
191
  def exec_with_allocation_control(value, memory_limit, time_limit, exec_method, overflow_message_type)
167
- return value.send exec_method if RUBY_VERSION < '2.0'
192
+ return value.send exec_method if !Debugger.trace_to_s
193
+ return exec_with_timeout(time_limit * 1e-3, "Timeout: evaluation of #{exec_method} took longer than #{time_limit}ms.") {value.send exec_method} if defined?(JRUBY_VERSION) || memory_limit <= 0 || (RUBY_VERSION < '2.0' && time_limit > 0)
194
+
168
195
 
169
- check_memory_limit = !defined?(JRUBY_VERSION) && ENV['DEBUGGER_MEMORY_LIMIT'].to_i > 0
170
196
  curr_thread = Thread.current
197
+ control_thread = Debugger.control_thread
171
198
 
172
199
  result = nil
200
+
201
+ trace_queue = Queue.new
202
+
173
203
  inspect_thread = DebugThread.start do
174
- start_alloc_size = ObjectSpace.memsize_of_all if check_memory_limit
204
+ start_alloc_size = ObjectSpace.memsize_of_all
175
205
  start_time = Time.now.to_f
176
206
 
177
- trace_point = TracePoint.new(:c_call, :call) do | |
178
- next unless Thread.current == inspect_thread
179
- next unless rand > 0.75
180
-
207
+ trace_point = TracePoint.new(:c_call, :call) do |tp|
181
208
  curr_time = Time.now.to_f
182
209
 
183
210
  if (curr_time - start_time) * 1e3 > time_limit
184
- curr_thread.raise TimeLimitError.new("Timeout: evaluation of #{exec_method} took longer than #{time_limit}ms.", trace_point, caller.to_a)
211
+ trace_queue << TimeLimitError.new("Timeout: evaluation of #{exec_method} took longer than #{time_limit}ms.", caller.to_a)
212
+ trace_point.disable
213
+ inspect_thread.kill
185
214
  end
186
215
 
187
- if check_memory_limit
188
- curr_alloc_size = ObjectSpace.memsize_of_all
189
- start_alloc_size = curr_alloc_size if curr_alloc_size < start_alloc_size
216
+ next unless rand > 0.75
190
217
 
191
- if curr_alloc_size - start_alloc_size > 1e6 * memory_limit
192
- curr_thread.raise MemoryLimitError.new("Out of memory: evaluation of #{exec_method} took more than #{memory_limit}mb.", trace_point, caller.to_a)
193
- end
218
+ curr_alloc_size = ObjectSpace.memsize_of_all
219
+ start_alloc_size = curr_alloc_size if curr_alloc_size < start_alloc_size
220
+
221
+ if curr_alloc_size - start_alloc_size > 1e6 * memory_limit
222
+ trace_queue << MemoryLimitError.new("Out of memory: evaluation of #{exec_method} took more than #{memory_limit}mb.", caller.to_a)
223
+ trace_point.disable
224
+ inspect_thread.kill
194
225
  end
195
226
  end
196
227
  trace_point.enable
197
228
  result = value.send exec_method
229
+ trace_queue << result
198
230
  trace_point.disable
199
231
  end
200
- inspect_thread.join
201
- return result
202
- rescue ExecError => e
203
- e.trace_point.disable
204
- print_debug(e.message + "\n" + e.backtrace.map {|l| "\t#{l}"}.join("\n"))
232
+
233
+ while(mes = trace_queue.pop)
234
+ if(mes.is_a? TimeLimitError or mes.is_a? MemoryLimitError)
235
+ print_debug(mes.message + "\n" + mes.backtrace.map {|l| "\t#{l}"}.join("\n"))
236
+ return overflow_message_type.call(mes)
237
+ else
238
+ return mes
239
+ end
240
+ end
241
+ rescue SimpleTimeLimitError => e
242
+ print_debug(e.message)
205
243
  return overflow_message_type.call(e)
206
- ensure
207
- inspect_thread.kill if inspect_thread && inspect_thread.alive?
208
244
  end
209
245
 
210
246
  def print_variable(name, value, kind)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-debug-ide
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1.beta8
4
+ version: 0.6.1.beta9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Barchfeld, Martin Krauskopf, Mark Moseley, JetBrains RubyMine Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-25 00:00:00.000000000 Z
11
+ date: 2017-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -103,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  version: 1.3.1
104
104
  requirements: []
105
105
  rubyforge_project: debug-commons
106
- rubygems_version: 2.6.10
106
+ rubygems_version: 2.5.1
107
107
  signing_key:
108
108
  specification_version: 4
109
109
  summary: IDE interface for ruby-debug.