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

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: b8f40891f590f541bc988442fa96447f2d48a087
4
- data.tar.gz: e3df17736f12937eb3165686502a561232880a56
3
+ metadata.gz: a74a2dbac3d18cf49bd2358b17bec396e0f56132
4
+ data.tar.gz: 1320ff44faab25776a1fed25921687f029a395af
5
5
  SHA512:
6
- metadata.gz: a21b87a270cfa68bf699ea727a1a8b1f96e1de5e6c719cedaae2f1419b5b01dedf9df5b440e6c2144bbfe1ae528f5456a9a768d0ef89ca40321992e9e679569e
7
- data.tar.gz: 1db25d901d6f9b49475600c017132affec187df06d410b05d9330964c56f6cb13c613f94f89158f18833558a3c7ca1e4e332dfc2d5a6c2d7161c1e0a6c9a64d4
6
+ metadata.gz: 767971a4b4a68bcf4daa925e7bdfc09a78a531d47a6780ebd697adb727ea4f6d11175c0957b33739bbb284f207084686833ec9078a097c2d8c1c6fe400b6a600
7
+ data.tar.gz: 664dd472e6e8672e3fb4e1d71be8b5be9a4af3bab4011c1ea0d43dd668a11327015bfe83c3852f602c1ae3716fd3ae273d779f1536d271d03b8a1327cf0c9966
@@ -1,6 +1,7 @@
1
1
  require 'ruby-debug-ide/attach/lldb'
2
2
  require 'ruby-debug-ide/attach/gdb'
3
3
  require 'socket'
4
+ require 'set'
4
5
 
5
6
  def attach_and_return_thread(options, pid, debugger_loader_path, argv)
6
7
  Thread.new(argv) do |argv|
@@ -57,7 +58,7 @@ def get_child_pids(pid)
57
58
  q = Queue.new
58
59
  q.push(pid)
59
60
 
60
- while (!q.empty?) do
61
+ until q.empty? do
61
62
  pid = q.pop
62
63
 
63
64
  pipe = IO.popen("pgrep -P #{pid}")
@@ -69,7 +70,25 @@ def get_child_pids(pid)
69
70
  end
70
71
  end
71
72
 
72
- pids
73
+ filter_ruby_processes(pids)
74
+ end
75
+
76
+ def filter_ruby_processes(pids)
77
+ pipe = IO.popen(%Q(lsof -c ruby | awk '{print $2 ":" $9}' | grep -E 'bin/ruby([[:digit:]]+\.?)*$'))
78
+
79
+ ruby_processes = Set.new
80
+
81
+ pipe.readlines.each do |process|
82
+ pid = process.split(/:/).first
83
+ ruby_processes.add(pid.to_i)
84
+ end
85
+
86
+ ruby_processes_pids, non_ruby_processes_pids = pids.partition {|pid| ruby_processes.include? pid}
87
+
88
+ DebugPrinter.print_debug("The following child processes was added to attach: #{ruby_processes_pids.join(', ')}") unless ruby_processes_pids.empty?
89
+ DebugPrinter.print_debug("The following child are not ruby processes: #{non_ruby_processes_pids.join(', ')}") unless non_ruby_processes_pids.empty?
90
+
91
+ ruby_processes_pids
73
92
  end
74
93
 
75
94
  def command_exists(command)
@@ -93,4 +112,4 @@ def choose_debugger(ruby_path, pid, gems_to_include, debugger_loader_path, argv)
93
112
  end
94
113
 
95
114
  debugger
96
- end
115
+ end
@@ -118,7 +118,7 @@ module Debugger
118
118
  def debug_eval(str, b = get_binding)
119
119
  begin
120
120
  str = str.to_s
121
- str.force_encoding('UTF-8') if(RUBY_VERSION > '2.0')
121
+ str.force_encoding('UTF-8') if(RUBY_VERSION >= '2.0')
122
122
  to_inspect = Command.unescape_incoming(str)
123
123
  max_time = Debugger.evaluation_timeout
124
124
  @printer.print_debug("Evaluating %s with timeout after %i sec", str, max_time)
@@ -16,7 +16,8 @@ module Debugger
16
16
  'tracing' => false,
17
17
  'int_handler' => true,
18
18
  'cli_debug' => (ENV['DEBUGGER_CLI_DEBUG'] == 'true'),
19
- 'notify_dispatcher' => true
19
+ 'notify_dispatcher' => true,
20
+ 'evaluation_timeout' => 10
20
21
  )
21
22
 
22
23
  if(options.ignore_port)
@@ -43,6 +44,7 @@ module Debugger
43
44
  # set options
44
45
  Debugger.keep_frame_binding = options.frame_bind
45
46
  Debugger.tracing = options.tracing
47
+ Debugger.evaluation_timeout = options.evaluation_timeout
46
48
  Debugger.cli_debug = options.cli_debug
47
49
  Debugger.prepare_debugger(options)
48
50
  end
@@ -1,3 +1,3 @@
1
1
  module Debugger
2
- IDE_VERSION='0.6.1.beta7'
2
+ IDE_VERSION='0.6.1.beta8'
3
3
  end
@@ -13,25 +13,21 @@ module Debugger
13
13
  SPECIAL_SYMBOL_MESSAGE = lambda {|e| '<?>'}
14
14
  end
15
15
 
16
- class MemoryLimitError < StandardError
16
+ class ExecError < StandardError
17
17
  attr_reader :message
18
+ attr_reader :trace_point
18
19
  attr_reader :backtrace
19
20
 
20
- def initialize(message, backtrace = [])
21
+ def initialize(message, trace_point, backtrace = [])
21
22
  @message = message
23
+ @trace_point = trace_point
22
24
  @backtrace = backtrace
23
25
  end
24
26
  end
25
27
 
26
- class TimeLimitError < StandardError
27
- attr_reader :message
28
- attr_reader :backtrace
28
+ class MemoryLimitError < ExecError; end
29
29
 
30
- def initialize(message, backtrace = [])
31
- @message = message
32
- @backtrace = backtrace
33
- end
34
- end
30
+ class TimeLimitError < ExecError; end
35
31
 
36
32
  class XmlPrinter # :nodoc:
37
33
  class ExceptionProxy
@@ -168,47 +164,47 @@ module Debugger
168
164
  end
169
165
 
170
166
  def exec_with_allocation_control(value, memory_limit, time_limit, exec_method, overflow_message_type)
171
- check_memory_limit = true
172
- if (defined?(JRUBY_VERSION) || ENV['DEBUGGER_MEMORY_LIMIT'].to_i <= 0)
173
- check_memory_limit = false
174
- end
167
+ return value.send exec_method if RUBY_VERSION < '2.0'
168
+
169
+ check_memory_limit = !defined?(JRUBY_VERSION) && ENV['DEBUGGER_MEMORY_LIMIT'].to_i > 0
175
170
  curr_thread = Thread.current
176
- result = nil
177
- inspect_thread = DebugThread.start {
178
171
 
179
- start_alloc_size = ObjectSpace.memsize_of_all if (check_memory_limit)
172
+ result = nil
173
+ inspect_thread = DebugThread.start do
174
+ start_alloc_size = ObjectSpace.memsize_of_all if check_memory_limit
180
175
  start_time = Time.now.to_f
181
176
 
182
- trace = TracePoint.new(:c_call, :call) do |tp|
177
+ trace_point = TracePoint.new(:c_call, :call) do | |
178
+ next unless Thread.current == inspect_thread
179
+ next unless rand > 0.75
183
180
 
184
- if (rand > 0.75)
185
- curr_time = Time.now.to_f
181
+ curr_time = Time.now.to_f
186
182
 
187
- if ((curr_time - start_time) * 1e3 > time_limit)
188
- curr_thread.raise TimeLimitError.new("Timeout: evaluation of #{exec_method} took longer than #{time_limit}ms.", caller.to_a)
189
- inspect_thread.kill
190
- end
183
+ 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)
185
+ end
191
186
 
192
- if (check_memory_limit)
193
- curr_alloc_size = ObjectSpace.memsize_of_all
194
- start_alloc_size = curr_alloc_size if (curr_alloc_size < start_alloc_size)
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
195
190
 
196
- if (curr_alloc_size - start_alloc_size > 1e6 * memory_limit)
197
- curr_thread.raise MemoryLimitError.new("Out of memory: evaluation of #{exec_method} took more than #{memory_limit}mb.", caller.to_a)
198
- inspect_thread.kill
199
- end
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)
200
193
  end
201
194
  end
202
- end.enable {
203
- result = value.send exec_method
204
- }
205
- }
195
+ end
196
+ trace_point.enable
197
+ result = value.send exec_method
198
+ trace_point.disable
199
+ end
206
200
  inspect_thread.join
207
- inspect_thread.kill
208
201
  return result
209
- rescue MemoryLimitError, TimeLimitError => e
210
- print_debug(e.message + "\n" + e.backtrace.map{|l| "\t#{l}"}.join("\n"))
202
+ rescue ExecError => e
203
+ e.trace_point.disable
204
+ print_debug(e.message + "\n" + e.backtrace.map {|l| "\t#{l}"}.join("\n"))
211
205
  return overflow_message_type.call(e)
206
+ ensure
207
+ inspect_thread.kill if inspect_thread && inspect_thread.alive?
212
208
  end
213
209
 
214
210
  def print_variable(name, value, kind)
@@ -512,4 +508,4 @@ module Debugger
512
508
 
513
509
  end
514
510
 
515
- end
511
+ end
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.beta7
4
+ version: 0.6.1.beta8
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-08 00:00:00.000000000 Z
11
+ date: 2017-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake