ruby-debug 0.3-mswin32 → 0.4-mswin32
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.
- data/CHANGES +12 -0
- data/Rakefile +1 -1
- data/bin/rdebug +11 -1
- data/ext/ruby_debug.c +21 -4
- data/lib/ruby-debug.rb +8 -1
- data/lib/ruby-debug/command.rb +25 -6
- data/lib/ruby-debug/commands/control.rb +1 -0
- data/lib/ruby-debug/commands/display.rb +1 -0
- data/lib/ruby-debug/commands/eval.rb +15 -3
- data/lib/ruby-debug/commands/list.rb +11 -2
- data/lib/ruby-debug/commands/script.rb +59 -0
- data/lib/ruby-debug/commands/threads.rb +25 -10
- data/lib/ruby-debug/commands/tmate.rb +15 -3
- data/lib/ruby-debug/interface.rb +49 -0
- data/lib/ruby-debug/processor.rb +13 -2
- data/lib/ruby_debug.so +0 -0
- metadata +3 -2
data/CHANGES
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
0.4
|
2
|
+
- Debugger.start method takes a block. If a block is specified, this method starts debugger, yields to the block
|
3
|
+
and stops debugger at the end.
|
4
|
+
- 'tm[ate]' command accepts a frame number now.
|
5
|
+
- 'list' command accepts on/off parameter which controls whether listing will be displayed on every stop.
|
6
|
+
- 'eval on/off' controls the evaluation of unknown command.
|
7
|
+
- Debugger reads readline history file .rdebug_hist at startup and saves it at exit.
|
8
|
+
- 'sa[ve] <file>' command can be used to save current breackpoints and catchpoint if any
|
9
|
+
- 'sc[ript] <file' command can be used to run script file. Script files can contain only control commands.
|
10
|
+
- rdebug script accepts '--script FILE' parameter.
|
11
|
+
- thread commands are available for the control port.
|
12
|
+
|
1
13
|
0.3 (2006-08-07)
|
2
14
|
- Renamed Debugger.start_server to Debugger.start_remote.
|
3
15
|
- Debugger.start_remote activates debugger by calling Debugger.start.
|
data/Rakefile
CHANGED
data/bin/rdebug
CHANGED
@@ -12,7 +12,8 @@ options = OpenStruct.new(
|
|
12
12
|
'port' => Debugger::PORT,
|
13
13
|
'cport' => Debugger::PORT + 1,
|
14
14
|
'wait' => false,
|
15
|
-
'nostop' => false
|
15
|
+
'nostop' => false,
|
16
|
+
'script' => nil
|
16
17
|
)
|
17
18
|
|
18
19
|
opts = OptionParser.new do |opts|
|
@@ -28,6 +29,12 @@ EOB
|
|
28
29
|
opts.on("-c", "--client", "Connect to remote debugger") {options.client = true}
|
29
30
|
opts.on("-h", "--host HOST", "Host name used for remote debugging") {|options.host|}
|
30
31
|
opts.on("-p", "--port PORT", Integer, "Port used for remote debugging") {|options.port|}
|
32
|
+
opts.on("--script FILE", String, "Name of the script file to run") do |options.script|
|
33
|
+
unless File.exists?(options.script)
|
34
|
+
puts "Script file '#{options.script}' is not found"
|
35
|
+
exit
|
36
|
+
end
|
37
|
+
end
|
31
38
|
opts.on("--cport PORT", Integer, "Port used for contol commands, implies -s option") {|options.port|}
|
32
39
|
opts.separator ""
|
33
40
|
opts.separator "Common options:"
|
@@ -67,6 +74,9 @@ else
|
|
67
74
|
Debugger.start_remote(options.host, [options.port, options.cport])
|
68
75
|
else
|
69
76
|
Debugger.start
|
77
|
+
if options.script
|
78
|
+
Debugger.run_script(options.script)
|
79
|
+
end
|
70
80
|
debugger 2
|
71
81
|
end
|
72
82
|
load ARGV.shift
|
data/ext/ruby_debug.c
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
#include <rubysig.h>
|
5
5
|
#include <st.h>
|
6
6
|
|
7
|
-
#define DEBUG_VERSION "0.
|
7
|
+
#define DEBUG_VERSION "0.4"
|
8
8
|
|
9
9
|
typedef struct {
|
10
10
|
int thnum;
|
@@ -62,16 +62,18 @@ static VALUE debug_suspend(VALUE);
|
|
62
62
|
static VALUE create_binding(VALUE);
|
63
63
|
static VALUE debug_stop(VALUE);
|
64
64
|
|
65
|
+
#define IS_STARTED (threads_tbl != Qnil)
|
66
|
+
|
65
67
|
static VALUE
|
66
68
|
debug_is_started(VALUE self)
|
67
69
|
{
|
68
|
-
return
|
70
|
+
return IS_STARTED ? Qtrue : Qfalse;
|
69
71
|
}
|
70
72
|
|
71
73
|
static void
|
72
74
|
debug_check_started()
|
73
75
|
{
|
74
|
-
if(
|
76
|
+
if(!IS_STARTED)
|
75
77
|
{
|
76
78
|
rb_raise(rb_eRuntimeError, "Debugger.start is not called yet.");
|
77
79
|
}
|
@@ -181,7 +183,7 @@ call_at_line_unprotected(VALUE args)
|
|
181
183
|
{
|
182
184
|
VALUE context;
|
183
185
|
context = *RARRAY(args)->ptr;
|
184
|
-
rb_funcall2(context, idAtLine, RARRAY(args)->len - 1, RARRAY(args)->ptr + 1);
|
186
|
+
return rb_funcall2(context, idAtLine, RARRAY(args)->len - 1, RARRAY(args)->ptr + 1);
|
185
187
|
}
|
186
188
|
|
187
189
|
static VALUE
|
@@ -478,9 +480,20 @@ debug_event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
478
480
|
debugging--;
|
479
481
|
}
|
480
482
|
|
483
|
+
static VALUE
|
484
|
+
debug_stop_i(VALUE value)
|
485
|
+
{
|
486
|
+
if(IS_STARTED)
|
487
|
+
debug_stop(value);
|
488
|
+
return Qnil;
|
489
|
+
}
|
490
|
+
|
481
491
|
static VALUE
|
482
492
|
debug_start(VALUE self)
|
483
493
|
{
|
494
|
+
if(IS_STARTED)
|
495
|
+
return Qnil;
|
496
|
+
|
484
497
|
threads_tbl = rb_hash_new();
|
485
498
|
breakpoints = rb_ary_new();
|
486
499
|
waiting = rb_ary_new();
|
@@ -490,6 +503,10 @@ debug_start(VALUE self)
|
|
490
503
|
RUBY_EVENT_CALL | RUBY_EVENT_RETURN | RUBY_EVENT_CLASS |
|
491
504
|
RUBY_EVENT_END | RUBY_EVENT_RAISE
|
492
505
|
);
|
506
|
+
|
507
|
+
if(rb_block_given_p())
|
508
|
+
return rb_ensure(rb_yield, Qnil, debug_stop_i, Qnil);
|
509
|
+
|
493
510
|
return Qnil;
|
494
511
|
}
|
495
512
|
|
data/lib/ruby-debug.rb
CHANGED
@@ -89,7 +89,7 @@ module Debugger
|
|
89
89
|
cmd_port, ctrl_port = port, port + 1
|
90
90
|
end
|
91
91
|
|
92
|
-
@
|
92
|
+
@control_thread = Thread.start do
|
93
93
|
server = TCPServer.new(host, ctrl_port)
|
94
94
|
while (session = server.accept)
|
95
95
|
interface = RemoteInterface.new(session)
|
@@ -176,6 +176,13 @@ module Debugger
|
|
176
176
|
end
|
177
177
|
return "\n"
|
178
178
|
end
|
179
|
+
|
180
|
+
# runs a script file
|
181
|
+
def run_script(file, out = processor.interface)
|
182
|
+
interface = ScriptInterface.new(file, out)
|
183
|
+
processor = ControlCommandProcessor.new(interface)
|
184
|
+
processor.process_commands
|
185
|
+
end
|
179
186
|
end
|
180
187
|
end
|
181
188
|
|
data/lib/ruby-debug/command.rb
CHANGED
@@ -5,11 +5,17 @@ module Debugger
|
|
5
5
|
@commands ||= []
|
6
6
|
end
|
7
7
|
|
8
|
+
DEF_OPTIONS = {
|
9
|
+
:event => true,
|
10
|
+
:control => false,
|
11
|
+
:always_run => false,
|
12
|
+
:unknown => false,
|
13
|
+
}
|
14
|
+
|
8
15
|
def inherited(klass)
|
9
|
-
|
10
|
-
klass.
|
11
|
-
|
12
|
-
klass.instance_variable_get("@control") || false)
|
16
|
+
DEF_OPTIONS.each do |o, v|
|
17
|
+
klass.options[o] = v if klass.options[o].nil?
|
18
|
+
end
|
13
19
|
commands << klass
|
14
20
|
end
|
15
21
|
|
@@ -20,8 +26,21 @@ module Debugger
|
|
20
26
|
end
|
21
27
|
end
|
22
28
|
|
23
|
-
|
24
|
-
|
29
|
+
def method_missing(meth, *args, &block)
|
30
|
+
if meth.to_s =~ /^(.+?)=$/
|
31
|
+
@options[$1.intern] = args.first
|
32
|
+
else
|
33
|
+
if @options.has_key?(meth)
|
34
|
+
@options[meth]
|
35
|
+
else
|
36
|
+
super
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def options
|
42
|
+
@options ||= {}
|
43
|
+
end
|
25
44
|
end
|
26
45
|
|
27
46
|
def initialize(state)
|
@@ -1,11 +1,22 @@
|
|
1
1
|
module Debugger
|
2
2
|
class EvalCommand < Command
|
3
|
+
def match(input)
|
4
|
+
@input = input
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
3
8
|
def regexp
|
4
|
-
/^\s*(
|
9
|
+
/^\s*(p|e(?:val)?)(?:\s+(on|off)|\s+)/
|
5
10
|
end
|
6
11
|
|
7
12
|
def execute
|
8
|
-
|
13
|
+
if @match && @match[1] != 'p' && %w[on off].include?(@match[2])
|
14
|
+
self.class.unknown = @match[2] == 'on'
|
15
|
+
print "Evaluation of unknown command is #{self.class.unknown ? 'on': 'off'}.\n"
|
16
|
+
return
|
17
|
+
end
|
18
|
+
expr = @match ? @match.post_match : @input
|
19
|
+
print "%s\n", debug_eval(expr).inspect
|
9
20
|
end
|
10
21
|
|
11
22
|
class << self
|
@@ -21,7 +32,8 @@ module Debugger
|
|
21
32
|
else
|
22
33
|
%{
|
23
34
|
e[val] expression\tevaluate expression and print its value,
|
24
|
-
\t\t\talias for p
|
35
|
+
\t\t\talias for p.
|
36
|
+
e[val] on/off\t\twhen 'on', debugger will evaluate every unknown command.
|
25
37
|
}
|
26
38
|
end
|
27
39
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Debugger
|
2
2
|
class ListCommand < Command
|
3
3
|
def regexp
|
4
|
-
/^\s*l(?:ist)?(?:\s
|
4
|
+
/^\s*l(?:ist)?(?:\s*(.+))?$/
|
5
5
|
end
|
6
6
|
|
7
7
|
def execute
|
8
|
-
if
|
8
|
+
if !@match || !@match[1]
|
9
9
|
b = @state.previous_line ? @state.previous_line + 10 : @state.line - 5
|
10
10
|
e = b + 9
|
11
11
|
elsif @match[1] == '-'
|
@@ -15,6 +15,14 @@ module Debugger
|
|
15
15
|
@state.previous_line = nil
|
16
16
|
b = @state.line - 5
|
17
17
|
e = b + 9
|
18
|
+
elsif @match[1] == 'on'
|
19
|
+
self.class.always_run = true
|
20
|
+
print "Listing is on.\n"
|
21
|
+
return
|
22
|
+
elsif @match[1] == 'off'
|
23
|
+
self.class.always_run = false
|
24
|
+
print "Listing is off.\n"
|
25
|
+
return
|
18
26
|
else
|
19
27
|
b, e = @match[1].split(/[-,]/)
|
20
28
|
if e
|
@@ -40,6 +48,7 @@ module Debugger
|
|
40
48
|
l[ist] -\tlist backward
|
41
49
|
l[ist] =\tlist current line
|
42
50
|
l[ist] nn-mm\tlist given lines
|
51
|
+
l[ist] on/off\tprint listing on every stop
|
43
52
|
}
|
44
53
|
end
|
45
54
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Debugger
|
2
|
+
class ScriptCommand < Command
|
3
|
+
self.control = true
|
4
|
+
|
5
|
+
def regexp
|
6
|
+
/^\s*sc(?:ript)?\s+(.+)$/
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute
|
10
|
+
unless File.exists?(@match[1])
|
11
|
+
print "Script file '#{@match[1]}' is not found\n"
|
12
|
+
return
|
13
|
+
end
|
14
|
+
Debugger.run_script(@match[1], @state)
|
15
|
+
end
|
16
|
+
|
17
|
+
class << self
|
18
|
+
def help_command
|
19
|
+
'script'
|
20
|
+
end
|
21
|
+
|
22
|
+
def help(cmd)
|
23
|
+
%{
|
24
|
+
script FILE\texecutes a script file
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class SaveCommand < Command
|
31
|
+
self.control = true
|
32
|
+
|
33
|
+
def regexp
|
34
|
+
/^\s*sa(?:ve)?\s+(.+)$/
|
35
|
+
end
|
36
|
+
|
37
|
+
def execute
|
38
|
+
open(@match[1], 'w') do |file|
|
39
|
+
Debugger.breakpoints.each do |b|
|
40
|
+
file.puts "break #{b.source}:#{b.pos}#{" if #{b.expr}" if b.expr}"
|
41
|
+
end
|
42
|
+
file.puts "catch #{Debugger.catchpoint}" if Debugger.catchpoint
|
43
|
+
end
|
44
|
+
print "Saved to '#{@match[1]}'\n"
|
45
|
+
end
|
46
|
+
|
47
|
+
class << self
|
48
|
+
def help_command
|
49
|
+
'save'
|
50
|
+
end
|
51
|
+
|
52
|
+
def help(cmd)
|
53
|
+
%{
|
54
|
+
save FILE\tsaves current breakpoints and catchpoint as a script file
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -1,11 +1,9 @@
|
|
1
1
|
module Debugger
|
2
2
|
module ThreadFunctions
|
3
3
|
def display_context(c)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
print " "
|
8
|
-
end
|
4
|
+
c_flag = c.thread == Thread.current ? '+' : ' '
|
5
|
+
d_flag = debugger_thread?(c) ? '!' : ' '
|
6
|
+
print "%s%s", c_flag, d_flag
|
9
7
|
print "%d ", c.thnum
|
10
8
|
print "%s\t", c.thread.inspect
|
11
9
|
last_frame = c.frames.first
|
@@ -14,9 +12,14 @@ module Debugger
|
|
14
12
|
end
|
15
13
|
print "\n"
|
16
14
|
end
|
15
|
+
|
16
|
+
def debugger_thread?(c)
|
17
|
+
[Debugger.thread, Debugger.control_thread].include?(c.thread)
|
18
|
+
end
|
17
19
|
end
|
18
20
|
|
19
21
|
class ThreadListCommand < Command
|
22
|
+
self.control = true
|
20
23
|
include ThreadFunctions
|
21
24
|
|
22
25
|
def regexp
|
@@ -43,6 +46,7 @@ module Debugger
|
|
43
46
|
end
|
44
47
|
|
45
48
|
class ThreadSwitchCommand < Command
|
49
|
+
self.control = true
|
46
50
|
include ThreadFunctions
|
47
51
|
|
48
52
|
def regexp
|
@@ -51,8 +55,11 @@ module Debugger
|
|
51
55
|
|
52
56
|
def execute
|
53
57
|
c = get_context(@match[1].to_i)
|
54
|
-
|
58
|
+
case
|
59
|
+
when c == @state.context
|
55
60
|
print "It's the current thread.\n"
|
61
|
+
when debugger_thread?(c)
|
62
|
+
print "Can't switch to the debugger thread.\n"
|
56
63
|
else
|
57
64
|
display_context(c)
|
58
65
|
c.stop_next = 1
|
@@ -75,6 +82,7 @@ module Debugger
|
|
75
82
|
end
|
76
83
|
|
77
84
|
class ThreadStopCommand < Command
|
85
|
+
self.control = true
|
78
86
|
include ThreadFunctions
|
79
87
|
|
80
88
|
def regexp
|
@@ -83,9 +91,12 @@ module Debugger
|
|
83
91
|
|
84
92
|
def execute
|
85
93
|
c = get_context(@match[1].to_i)
|
86
|
-
|
94
|
+
case
|
95
|
+
when c == @state.context
|
87
96
|
print "It's the current thread.\n"
|
88
|
-
|
97
|
+
when debugger_thread?(c)
|
98
|
+
print "Can't stop the debugger thread.\n"
|
99
|
+
when c.thread.stop?
|
89
100
|
print "Already stopped.\n"
|
90
101
|
else
|
91
102
|
display_context(c)
|
@@ -131,6 +142,7 @@ module Debugger
|
|
131
142
|
end
|
132
143
|
|
133
144
|
class ThreadResumeCommand < Command
|
145
|
+
self.control = true
|
134
146
|
include ThreadFunctions
|
135
147
|
|
136
148
|
def regexp
|
@@ -139,9 +151,12 @@ module Debugger
|
|
139
151
|
|
140
152
|
def execute
|
141
153
|
c = get_context(@match[1].to_i)
|
142
|
-
|
154
|
+
case
|
155
|
+
when c == @state.context
|
143
156
|
print "It's the current thread.\n"
|
144
|
-
|
157
|
+
when debugger_thread?(c)
|
158
|
+
print "Can't resume the debugger thread.\n"
|
159
|
+
when !c.thread.stop?
|
145
160
|
print "Already running."
|
146
161
|
else
|
147
162
|
display_context(c)
|
@@ -2,11 +2,22 @@ module Debugger
|
|
2
2
|
if RUBY_PLATFORM =~ /darwin/
|
3
3
|
class TextMateCommand < Command
|
4
4
|
def regexp
|
5
|
-
/^\s*tm(?:ate)?$/
|
5
|
+
/^\s*tm(?:ate)?(?:\s*(\d+))?$/
|
6
6
|
end
|
7
7
|
|
8
8
|
def execute
|
9
|
-
|
9
|
+
if @match[1]
|
10
|
+
frm_n = @match[1].to_i
|
11
|
+
if frm_n > @state.context.frames.size || frm_n == 0
|
12
|
+
print "Wrong frame number\n"
|
13
|
+
return
|
14
|
+
end
|
15
|
+
frame = @state.context.frames[frm_n - 1]
|
16
|
+
file, line = frame.file, frame.line
|
17
|
+
else
|
18
|
+
file, line = @state.file, @state.line
|
19
|
+
end
|
20
|
+
%x|open 'txmt://open?url=file://#{File.expand_path(file)}&line=#{line}'|
|
10
21
|
end
|
11
22
|
|
12
23
|
class << self
|
@@ -16,7 +27,8 @@ module Debugger
|
|
16
27
|
|
17
28
|
def help(cmd)
|
18
29
|
%{
|
19
|
-
tm[ate]\topens a current file in TextMate
|
30
|
+
tm[ate] n\topens a current file in TextMate.
|
31
|
+
\t\tIt uses n-th frame if arg (n) is specifed.
|
20
32
|
}
|
21
33
|
end
|
22
34
|
end
|
data/lib/ruby-debug/interface.rb
CHANGED
@@ -19,6 +19,26 @@ module Debugger
|
|
19
19
|
|
20
20
|
begin
|
21
21
|
require 'readline'
|
22
|
+
FILE_HISTORY = ".rdebug_hist"
|
23
|
+
|
24
|
+
save_file = File.join(Dir.getwd, FILE_HISTORY)
|
25
|
+
open(save_file, 'r') do |file|
|
26
|
+
file.each do |line|
|
27
|
+
line.chomp!
|
28
|
+
Readline::HISTORY << line
|
29
|
+
end
|
30
|
+
end if File.exists?(save_file)
|
31
|
+
|
32
|
+
class << Debugger; self end.send('define_method', 'save_history') do
|
33
|
+
open(save_file, 'w') do |file|
|
34
|
+
Readline::HISTORY.each do |line|
|
35
|
+
file.puts line
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
class << Debugger; public :save_history end
|
40
|
+
at_exit { Debugger.save_history }
|
41
|
+
|
22
42
|
def readline(prompt, hist)
|
23
43
|
Readline::readline(prompt, hist)
|
24
44
|
end
|
@@ -66,4 +86,33 @@ module Debugger
|
|
66
86
|
result.chomp
|
67
87
|
end
|
68
88
|
end
|
89
|
+
|
90
|
+
class ScriptInterface
|
91
|
+
def initialize(file, out)
|
92
|
+
@file = open(file)
|
93
|
+
@out = out
|
94
|
+
end
|
95
|
+
|
96
|
+
def read_command(prompt)
|
97
|
+
while result = @file.gets
|
98
|
+
next if result =~ /^\s*#/
|
99
|
+
next if result.strip.empty?
|
100
|
+
break
|
101
|
+
end
|
102
|
+
raise IOError unless result
|
103
|
+
result
|
104
|
+
end
|
105
|
+
|
106
|
+
def confirm(prompt)
|
107
|
+
'y'
|
108
|
+
end
|
109
|
+
|
110
|
+
def print(*args)
|
111
|
+
@out.print(*args)
|
112
|
+
end
|
113
|
+
|
114
|
+
def close
|
115
|
+
@file.close
|
116
|
+
end
|
117
|
+
end
|
69
118
|
end
|
data/lib/ruby-debug/processor.rb
CHANGED
@@ -85,7 +85,7 @@ module Debugger
|
|
85
85
|
s.commands = event_cmds
|
86
86
|
end
|
87
87
|
commands = event_cmds.map{|cmd| cmd.new(state) }
|
88
|
-
commands.
|
88
|
+
commands.select{|cmd| cmd.class.always_run }.each{|cmd| cmd.execute }
|
89
89
|
|
90
90
|
while !state.proceed? and input = @interface.read_command("(rdb:%d) " % context.thnum)
|
91
91
|
catch(:debug_error) do
|
@@ -99,7 +99,12 @@ module Debugger
|
|
99
99
|
if cmd = commands.find{ |c| c.match(input) }
|
100
100
|
cmd.execute
|
101
101
|
else
|
102
|
-
|
102
|
+
unknown_cmd = commands.find{|cmd| cmd.class.unknown }
|
103
|
+
if unknown_cmd
|
104
|
+
unknown_cmd.execute
|
105
|
+
else
|
106
|
+
print "Unknown command\n"
|
107
|
+
end
|
103
108
|
end
|
104
109
|
end
|
105
110
|
end
|
@@ -161,6 +166,8 @@ module Debugger
|
|
161
166
|
rescue Exception
|
162
167
|
print "INTERNAL ERROR!!! #{$!}\n"
|
163
168
|
print $!.backtrace.map{|l| "\t#{l}"}.join("\n")
|
169
|
+
ensure
|
170
|
+
@interface.close
|
164
171
|
end
|
165
172
|
|
166
173
|
class State
|
@@ -180,6 +187,10 @@ module Debugger
|
|
180
187
|
def confirm(*args)
|
181
188
|
'y'
|
182
189
|
end
|
190
|
+
|
191
|
+
def context
|
192
|
+
nil
|
193
|
+
end
|
183
194
|
|
184
195
|
def file
|
185
196
|
print "No filename given.\n"
|
data/lib/ruby_debug.so
CHANGED
Binary file
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: ruby-debug
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "0.
|
7
|
-
date: 2006-08-
|
6
|
+
version: "0.4"
|
7
|
+
date: 2006-08-24 23:57:48 -04:00
|
8
8
|
summary: Fast Ruby debugger
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- lib/ruby-debug/commands/help.rb
|
50
50
|
- lib/ruby-debug/commands/list.rb
|
51
51
|
- lib/ruby-debug/commands/method.rb
|
52
|
+
- lib/ruby-debug/commands/script.rb
|
52
53
|
- lib/ruby-debug/commands/stepping.rb
|
53
54
|
- lib/ruby-debug/commands/threads.rb
|
54
55
|
- lib/ruby-debug/commands/tmate.rb
|