ruby-debug-ide 0.4.23 → 0.4.24.beta4
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 +8 -8
- data/ChangeLog.md +6 -0
- data/bin/rdebug-ide +6 -1
- data/lib/ruby-debug-ide.rb +1 -1
- data/lib/ruby-debug-ide/commands/variables.rb +1 -1
- data/lib/ruby-debug-ide/ide_processor.rb +4 -7
- data/lib/ruby-debug-ide/version.rb +1 -1
- data/lib/ruby-debug-ide/xml_printer.rb +40 -23
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NGU4NDUzY2M3ZWY5YjExYmU1YTY3MTJiYzA1ZTFhNGU2MDc4NDc2Yw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTQyNDJlZjIwN2UzZjRiZWU2Yzc5YTVkYjA0NzJlMGRiNGFkOGNmNQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MGE1MDU5ZWEzNDFiM2IwZjY5ZjVkYTc5NjE3MzAwNTU5Y2M5MTU0NGU0OWU3
|
10
|
+
NmQwZjJiZmVmZjUzMGNiYzQ2YTMxMDVhYmE2MGNiNGE0ZWVjMjBjMzM5NWQ4
|
11
|
+
NDczZjEyMTdiN2QxMmZlNWVkYTYzMjFlNmQ4OTU5YjE4MmQ3YmE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OWE2YzFjNDExY2UyNjM0ZDUwMDhmNmZkODVmOTNiZTllYmI3MDdhNDA1ZGRm
|
14
|
+
ODkxN2U5NTY5ZWIyZWUwNDBlZWEwN2M5ZjFiODMyNjI3MmZjYzI2M2ExNjE4
|
15
|
+
NTE2YWI2NzdhYjVkZWNmMDllZGIxNWRlY2JlNmFkZTQxZjI1ZWY=
|
data/ChangeLog.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## [0.4.24.beta4](https://github.com/ruby-debug/ruby-debug-ide/compare/v0.4.23...v0.4.24.beta4)
|
2
|
+
|
3
|
+
* Performance optimisation for variable representation [RUBY-16055](https://youtrack.jetbrains.com/issue/RUBY-16055)
|
4
|
+
* Added command line argument to enable RubyMine-specific protocol extensions
|
5
|
+
* Several fixes to make debugger more robust [RUBY-16070](https://youtrack.jetbrains.com/issue/RUBY-16070)
|
6
|
+
|
1
7
|
## [0.4.23](https://github.com/ruby-debug/ruby-debug-ide/compare/v0.4.23.beta11...v0.4.23)
|
2
8
|
|
3
9
|
* fixed problem with compact name for binary params (strings with invalid encoding)
|
data/bin/rdebug-ide
CHANGED
@@ -19,7 +19,8 @@ options = OpenStruct.new(
|
|
19
19
|
'tracing' => false,
|
20
20
|
'int_handler' => true,
|
21
21
|
'dispatcher_port' => -1,
|
22
|
-
'evaluation_timeout' => 10
|
22
|
+
'evaluation_timeout' => 10,
|
23
|
+
'rm_protocol_extensions' => false
|
23
24
|
)
|
24
25
|
|
25
26
|
opts = OptionParser.new do |opts|
|
@@ -54,6 +55,9 @@ EOB
|
|
54
55
|
|
55
56
|
opts.on("--keep-frame-binding", "Keep frame bindings") {options.frame_bind = true}
|
56
57
|
opts.on("--disable-int-handler", "Disables interrupt signal handler") {options.int_handler = false}
|
58
|
+
opts.on("--rubymine-protocol-extensions", "Enable RubyMine-specific incompatible protocol extensions") do
|
59
|
+
options.rm_protocol_extensions = true
|
60
|
+
end
|
57
61
|
opts.separator ""
|
58
62
|
opts.separator "Common options:"
|
59
63
|
opts.on_tail("-v", "--version", "Show version") do
|
@@ -112,6 +116,7 @@ end
|
|
112
116
|
Debugger.keep_frame_binding = options.frame_bind
|
113
117
|
Debugger.tracing = options.tracing
|
114
118
|
Debugger.evaluation_timeout = options.evaluation_timeout
|
119
|
+
Debugger.rm_protocol_extensions = options.rm_protocol_extensions
|
115
120
|
|
116
121
|
Debugger.debug_program(options)
|
117
122
|
|
data/lib/ruby-debug-ide.rb
CHANGED
@@ -129,7 +129,7 @@ module Debugger
|
|
129
129
|
locals = @state.context.frame_locals(@state.frame_pos)
|
130
130
|
_self = @state.context.frame_self(@state.frame_pos)
|
131
131
|
begin
|
132
|
-
locals['self'] = _self unless _self.to_s
|
132
|
+
locals['self'] = _self unless "main" == _self.to_s
|
133
133
|
rescue => ex
|
134
134
|
locals['self'] = "<Cannot evaluate self>"
|
135
135
|
$stderr << "Cannot evaluate self\n#{ex.class.name}: #{ex.message}\n #{ex.backtrace.join("\n ")}"
|
@@ -28,13 +28,13 @@ module Debugger
|
|
28
28
|
s.interface = @interface
|
29
29
|
end
|
30
30
|
event_cmds = Command.commands.map{|cmd| cmd.new(state, @printer) }
|
31
|
-
|
31
|
+
until state.proceed? do
|
32
32
|
input = @interface.command_queue.pop
|
33
33
|
catch(:debug_error) do
|
34
34
|
splitter[input].each do |input|
|
35
35
|
# escape % since print_debug might use printf
|
36
36
|
@printer.print_debug "Processing in context: #{input.gsub('%', '%%')}"
|
37
|
-
if cmd = event_cmds.find { |c| c.match(input) }
|
37
|
+
if (cmd = event_cmds.find { |c| c.match(input) })
|
38
38
|
if context.dead? && cmd.class.need_context
|
39
39
|
@printer.print_msg "Command is unavailable\n"
|
40
40
|
else
|
@@ -42,15 +42,12 @@ module Debugger
|
|
42
42
|
end
|
43
43
|
else
|
44
44
|
@printer.print_msg "Unknown command: #{input}"
|
45
|
-
end
|
45
|
+
end
|
46
46
|
end
|
47
47
|
end
|
48
48
|
state.restore_context
|
49
49
|
end
|
50
|
-
rescue
|
51
|
-
@printer.print_error "INTERNAL ERROR!!! #{$!}\n" rescue nil
|
52
|
-
@printer.print_error $!.backtrace.map{|l| "\t#{l}"}.join("\n") rescue nil
|
53
|
-
rescue Exception
|
50
|
+
rescue ::Exception
|
54
51
|
@printer.print_error "INTERNAL ERROR!!! #{$!}\n" rescue nil
|
55
52
|
@printer.print_error $!.backtrace.map{|l| "\t#{l}"}.join("\n") rescue nil
|
56
53
|
end
|
@@ -78,7 +78,7 @@ module Debugger
|
|
78
78
|
def print_frame(context, frame_id, current_frame_id)
|
79
79
|
# idx + 1: one-based numbering as classic-debugger
|
80
80
|
file = context.frame_file(frame_id)
|
81
|
-
print "<frame no=\
|
81
|
+
print "<frame no=\"%s\" file=\"%s\" line=\"%s\" #{"current='true' " if frame_id == current_frame_id}/>",
|
82
82
|
frame_id + 1, File.expand_path(file), context.frame_line(frame_id)
|
83
83
|
end
|
84
84
|
|
@@ -171,31 +171,14 @@ module Debugger
|
|
171
171
|
end
|
172
172
|
end
|
173
173
|
value_str = handle_binary_data(value_str)
|
174
|
-
|
175
|
-
print("<variable name=\"%s\"
|
176
|
-
CGI.escapeHTML(name),
|
174
|
+
escaped_value_str = CGI.escapeHTML(value_str)
|
175
|
+
print("<variable name=\"%s\" %s kind=\"%s\" value=\"%s\" type=\"%s\" hasChildren=\"%s\" objectId=\"%#+x\">",
|
176
|
+
CGI.escapeHTML(name), build_compact_value_attr(value), kind, build_value_attr(escaped_value_str), value.class,
|
177
177
|
has_children, value.respond_to?(:object_id) ? value.object_id : value.id)
|
178
|
-
print("<value><![CDATA[%s]]></value>",
|
178
|
+
print("<value><![CDATA[%s]]></value>", escaped_value_str) if Debugger.rm_protocol_extensions
|
179
179
|
print('</variable>')
|
180
180
|
end
|
181
181
|
|
182
|
-
def build_compact_name(value_str, value)
|
183
|
-
compact = value_str
|
184
|
-
if value.is_a?(Array)
|
185
|
-
slice = value[0..10]
|
186
|
-
compact = slice.inspect
|
187
|
-
if value.size != slice.size
|
188
|
-
compact = compact[0..compact.size-2] + ", ...]"
|
189
|
-
end
|
190
|
-
end
|
191
|
-
if value.is_a?(Hash)
|
192
|
-
slice = value.sort_by { |k, _| k.to_s }[0..5]
|
193
|
-
compact = slice.map {|kv| "#{kv[0]}: #{handle_binary_data(kv[1])}"}.join(", ")
|
194
|
-
compact = "{" + compact + (slice.size != value.size ? ", ..." : "") + "}"
|
195
|
-
end
|
196
|
-
compact
|
197
|
-
end
|
198
|
-
|
199
182
|
def print_breakpoints(breakpoints)
|
200
183
|
print_element 'breakpoints' do
|
201
184
|
breakpoints.sort_by{|b| b.id }.each do |b|
|
@@ -298,7 +281,7 @@ module Debugger
|
|
298
281
|
end
|
299
282
|
|
300
283
|
def print_at_line(context, file, line)
|
301
|
-
print "<suspended file=\
|
284
|
+
print "<suspended file=\"%s\" line=\"%s\" threadId=\"%d\" frames=\"%d\"/>",
|
302
285
|
File.expand_path(file), line, context.thnum, context.stack_size
|
303
286
|
end
|
304
287
|
|
@@ -344,6 +327,7 @@ module Debugger
|
|
344
327
|
end
|
345
328
|
|
346
329
|
def handle_binary_data(value)
|
330
|
+
# noinspection RubyResolve
|
347
331
|
return '[Binary Data]' if (value.respond_to?('is_binary_data?') && value.is_binary_data?)
|
348
332
|
return '[Invalid encoding]' if (value.respond_to?('valid_encoding?') && !value.valid_encoding?)
|
349
333
|
value
|
@@ -357,6 +341,39 @@ module Debugger
|
|
357
341
|
end
|
358
342
|
end
|
359
343
|
|
344
|
+
def build_compact_name(value)
|
345
|
+
return compact_array_str(value) if value.is_a?(Array)
|
346
|
+
return compact_hash_str(value) if value.is_a?(Hash)
|
347
|
+
nil
|
348
|
+
rescue ::Exception => e
|
349
|
+
print_debug(e)
|
350
|
+
nil
|
351
|
+
end
|
352
|
+
|
353
|
+
def compact_array_str(value)
|
354
|
+
slice = value[0..10]
|
355
|
+
compact = slice.inspect
|
356
|
+
if value.size != slice.size
|
357
|
+
compact[0..compact.size-2] + ", ...]"
|
358
|
+
end
|
359
|
+
compact
|
360
|
+
end
|
361
|
+
|
362
|
+
def compact_hash_str(value)
|
363
|
+
slice = value.sort_by { |k, _| k.to_s }[0..5]
|
364
|
+
compact = slice.map { |kv| "#{kv[0]}: #{handle_binary_data(kv[1])}" }.join(", ")
|
365
|
+
"{" + compact + (slice.size != value.size ? ", ..." : "") + "}"
|
366
|
+
end
|
367
|
+
|
368
|
+
def build_compact_value_attr(value)
|
369
|
+
compact_value_str = build_compact_name(value)
|
370
|
+
compact_value_str.nil? ? '' : "compactValue=\"#{CGI.escapeHTML(compact_value_str)}\""
|
371
|
+
end
|
372
|
+
|
373
|
+
def build_value_attr(escaped_value_str)
|
374
|
+
Debugger.rm_protocol_extensions ? '' : escaped_value_str
|
375
|
+
end
|
376
|
+
|
360
377
|
instance_methods.each do |m|
|
361
378
|
if m.to_s.index('print_') == 0
|
362
379
|
protect m
|
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.4.
|
4
|
+
version: 0.4.24.beta4
|
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: 2014-
|
11
|
+
date: 2014-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -86,12 +86,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
86
86
|
version: 1.8.2
|
87
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- - ! '
|
89
|
+
- - ! '>'
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version:
|
91
|
+
version: 1.3.1
|
92
92
|
requirements: []
|
93
93
|
rubyforge_project: debug-commons
|
94
|
-
rubygems_version: 2.
|
94
|
+
rubygems_version: 2.4.5
|
95
95
|
signing_key:
|
96
96
|
specification_version: 4
|
97
97
|
summary: IDE interface for ruby-debug.
|