ruby-debug-base19x 0.11.30.pre10 → 0.11.30.pre12
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/Rakefile +12 -0
- data/ext/ruby_debug/extconf.rb +29 -24
- data/ext/ruby_debug/ruby_debug.c +72 -63
- data/ext/ruby_debug/ruby_debug.h +5 -1
- data/lib/ruby-debug-base.rb +0 -14
- metadata +12 -24
data/Rakefile
CHANGED
@@ -25,3 +25,15 @@ task :test_base => :lib do
|
|
25
25
|
t.verbose = true
|
26
26
|
end
|
27
27
|
end
|
28
|
+
|
29
|
+
desc "Remove built files"
|
30
|
+
task :clean do
|
31
|
+
cd "ext/ruby_debug" do
|
32
|
+
if File.exists?("Makefile")
|
33
|
+
sh "make clean"
|
34
|
+
rm "Makefile"
|
35
|
+
end
|
36
|
+
derived_files = Dir.glob(".o") + Dir.glob("*.so") + Dir.glob("*.bundle")
|
37
|
+
rm derived_files unless derived_files.empty?
|
38
|
+
end
|
39
|
+
end
|
data/ext/ruby_debug/extconf.rb
CHANGED
@@ -1,8 +1,22 @@
|
|
1
|
+
# autodetect ruby headers
|
2
|
+
unless ARGV.any? {|arg| arg.include?('--with-ruby-include') }
|
3
|
+
require 'rbconfig'
|
4
|
+
bindir = RbConfig::CONFIG['bindir']
|
5
|
+
if bindir =~ %r{(^.*/\.rbenv/versions)/([^/]+)/bin$}
|
6
|
+
ruby_include = "#{$1}/#{$2}/include/ruby-1.9.1/ruby-#{$2}"
|
7
|
+
ARGV << "--with-ruby-include=#{ruby_include}"
|
8
|
+
elsif bindir =~ %r{(^.*/\.rvm/rubies)/([^/]+)/bin$}
|
9
|
+
ruby_include = "#{$1}/#{$2}/include/ruby-1.9.1/#{$2}"
|
10
|
+
ruby_include = "#{ENV['rvm_path']}/src/#{$2}" unless File.exist?(ruby_include)
|
11
|
+
ARGV << "--with-ruby-include=#{ruby_include}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
1
15
|
require "mkmf"
|
2
|
-
require "ruby_core_source"
|
16
|
+
require "debugger/ruby_core_source"
|
3
17
|
|
4
18
|
hdrs = proc {
|
5
|
-
begin
|
19
|
+
result = begin
|
6
20
|
have_struct_member("rb_method_entry_t", "called_id", "method.h") or
|
7
21
|
have_struct_member("rb_control_frame_t", "method_id", "method.h")
|
8
22
|
end and
|
@@ -12,33 +26,24 @@ hdrs = proc {
|
|
12
26
|
end and
|
13
27
|
have_header("vm_core.h") and have_header("iseq.h") and have_header("insns.inc") and
|
14
28
|
have_header("insns_info.inc") and have_header("eval_intern.h")
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
29
|
+
have_func("rb_iseq_new_main", "vm_core.h")
|
30
|
+
have_func("rb_iseq_compile_on_base", "vm_core.h")
|
31
|
+
have_struct_member("rb_iseq_t", "location", "vm_core.h") or have_struct_member("rb_iseq_t", "filename", "vm_core.h")
|
32
|
+
have_struct_member("rb_iseq_t", "line_info_size", "vm_core.h") or have_struct_member("rb_iseq_t", "insn_info_size", "vm_core.h")
|
33
|
+
have_struct_member("rb_control_frame_t", "ep", "vm_core.h") or
|
34
|
+
have_struct_member("rb_control_frame_t", "dfp", "vm_core.h")
|
35
|
+
have_struct_member("rb_control_frame_t", "bp", "vm_core.h")
|
36
|
+
result
|
24
37
|
}
|
25
38
|
|
39
|
+
$defs << "-O0"
|
40
|
+
|
26
41
|
dir_config("ruby")
|
27
|
-
|
28
|
-
if (ENV['rvm_ruby_string'])
|
29
|
-
dest_dir = RbConfig::CONFIG["rubyhdrdir"]
|
30
|
-
with_cppflags("-I" + dest_dir) {
|
31
|
-
if hdrs.call
|
32
|
-
create_makefile(name)
|
33
|
-
exit 0
|
34
|
-
end
|
35
|
-
}
|
36
|
-
end
|
37
|
-
if !Ruby_core_source::create_makefile_with_core(hdrs, name)
|
42
|
+
if !Debugger::RubyCoreSource.create_makefile_with_core(hdrs, "ruby_debug")
|
38
43
|
STDERR.print("Makefile creation failed\n")
|
39
44
|
STDERR.print("*************************************************************\n\n")
|
40
|
-
STDERR.print(" NOTE:
|
41
|
-
STDERR.print("
|
45
|
+
STDERR.print(" NOTE: If your headers were not found, try passing\n")
|
46
|
+
STDERR.print(" --with-ruby-include=PATH_TO_HEADERS \n\n")
|
42
47
|
STDERR.print("*************************************************************\n\n")
|
43
48
|
exit(1)
|
44
49
|
end
|
data/ext/ruby_debug/ruby_debug.c
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
#include <insns_info.inc>
|
10
10
|
#include "ruby_debug.h"
|
11
11
|
|
12
|
-
#define DEBUG_VERSION "0.11.30.
|
12
|
+
#define DEBUG_VERSION "0.11.30.pre12"
|
13
13
|
|
14
14
|
#define FRAME_N(n) (&debug_context->frames[debug_context->stack_size-(n)-1])
|
15
15
|
#define GET_FRAME (FRAME_N(check_frame_number(debug_context, frame)))
|
@@ -22,7 +22,9 @@
|
|
22
22
|
|
23
23
|
int rb_vm_get_sourceline(const rb_control_frame_t *cfp); /* from vm.c */
|
24
24
|
/* from iseq.c */
|
25
|
-
#ifdef
|
25
|
+
#ifdef HAVE_RB_ISEQ_COMPILE_ON_BASE
|
26
|
+
VALUE rb_iseq_compile_with_option(VALUE src, VALUE file, VALUE absolute_path, VALUE line, rb_block_t *base_block, VALUE opt);
|
27
|
+
#elif HAVE_RB_ISEQ_NEW_MAIN
|
26
28
|
VALUE rb_iseq_compile_with_option(VALUE src, VALUE file, VALUE filepath, VALUE line, VALUE opt);
|
27
29
|
#else
|
28
30
|
VALUE rb_iseq_compile_with_option(VALUE src, VALUE file, VALUE line, VALUE opt);
|
@@ -502,7 +504,11 @@ save_call_frame(rb_event_flag_t _event, debug_context_t *debug_context, VALUE se
|
|
502
504
|
debug_frame->arg_ary = Qnil;
|
503
505
|
debug_frame->argc = GET_THREAD()->cfp->iseq->argc;
|
504
506
|
debug_frame->info.runtime.cfp = GET_THREAD()->cfp;
|
507
|
+
#if VM_DEBUG_BP_CHECK
|
508
|
+
debug_frame->info.runtime.bp_check = GET_THREAD()->cfp->bp_check;
|
509
|
+
#else
|
505
510
|
debug_frame->info.runtime.bp = GET_THREAD()->cfp->bp;
|
511
|
+
#endif
|
506
512
|
debug_frame->info.runtime.block_iseq = GET_THREAD()->cfp->block_iseq;
|
507
513
|
debug_frame->info.runtime.block_pc = NULL;
|
508
514
|
debug_frame->info.runtime.last_pc = GET_THREAD()->cfp->pc;
|
@@ -521,9 +527,9 @@ filename_cmp_impl(VALUE source, char *file);
|
|
521
527
|
|
522
528
|
int
|
523
529
|
filename_cmp(VALUE source, char *file) {
|
524
|
-
#ifdef
|
530
|
+
#ifdef _WIN32
|
525
531
|
return filename_cmp_impl(source, file);
|
526
|
-
#
|
532
|
+
#else
|
527
533
|
|
528
534
|
if (!RTEST(resolve_symlinks)) {
|
529
535
|
return filename_cmp_impl(source, file);
|
@@ -547,6 +553,7 @@ filename_cmp(VALUE source, char *file) {
|
|
547
553
|
return result;
|
548
554
|
}
|
549
555
|
#endif
|
556
|
+
#endif
|
550
557
|
}
|
551
558
|
|
552
559
|
int
|
@@ -704,7 +711,10 @@ create_catch_table(debug_context_t *debug_context, unsigned long cont)
|
|
704
711
|
GET_THREAD()->parse_in_eval++;
|
705
712
|
GET_THREAD()->mild_compile_error++;
|
706
713
|
/* compiling with option Qfalse (no options) prevents debug hook calls during this catch routine */
|
707
|
-
#ifdef
|
714
|
+
#ifdef HAVE_RB_ISEQ_COMPILE_ON_BASE
|
715
|
+
catch_table->iseq = rb_iseq_compile_with_option(
|
716
|
+
rb_str_new_cstr("begin\nend"), rb_str_new_cstr("(exception catcher)"), Qnil, INT2FIX(1), NULL, Qfalse);
|
717
|
+
#elif HAVE_RB_ISEQ_NEW_MAIN
|
708
718
|
catch_table->iseq = rb_iseq_compile_with_option(
|
709
719
|
rb_str_new_cstr("begin\nend"), rb_str_new_cstr("(exception catcher)"), Qnil, INT2FIX(1), Qfalse);
|
710
720
|
#else
|
@@ -723,6 +733,7 @@ create_catch_table(debug_context_t *debug_context, unsigned long cont)
|
|
723
733
|
return(catch_table);
|
724
734
|
}
|
725
735
|
|
736
|
+
#ifdef RUBY_EVENT_VM
|
726
737
|
static int
|
727
738
|
set_thread_event_flag_i(st_data_t key, st_data_t val, st_data_t flag)
|
728
739
|
{
|
@@ -733,6 +744,7 @@ set_thread_event_flag_i(st_data_t key, st_data_t val, st_data_t flag)
|
|
733
744
|
|
734
745
|
return(ST_CONTINUE);
|
735
746
|
}
|
747
|
+
#endif
|
736
748
|
|
737
749
|
static void
|
738
750
|
debug_event_hook(rb_event_flag_t event, VALUE data, VALUE self, ID mid, VALUE klass)
|
@@ -757,8 +769,9 @@ debug_event_hook(rb_event_flag_t event, VALUE data, VALUE self, ID mid, VALUE kl
|
|
757
769
|
mid = iseq->defined_method_id;
|
758
770
|
klass = iseq->klass;
|
759
771
|
}
|
760
|
-
|
772
|
+
#ifdef ID_ALLOCATOR
|
761
773
|
if (mid == ID_ALLOCATOR) return;
|
774
|
+
#endif
|
762
775
|
|
763
776
|
/* return if thread is marked as 'ignored'.
|
764
777
|
debugger's threads are marked this way
|
@@ -805,13 +818,19 @@ debug_event_hook(rb_event_flag_t event, VALUE data, VALUE self, ID mid, VALUE kl
|
|
805
818
|
debug_context->old_iseq_catch = NULL;
|
806
819
|
}
|
807
820
|
|
821
|
+
#ifdef RUBY_EVENT_VM
|
808
822
|
/* make sure all threads have event flag set so we'll get its events */
|
809
823
|
st_foreach(thread->vm->living_threads, set_thread_event_flag_i, 0);
|
824
|
+
#endif
|
810
825
|
|
811
826
|
/* remove any frames that are now out of scope */
|
812
827
|
while(debug_context->stack_size > 0)
|
813
828
|
{
|
829
|
+
#if VM_DEBUG_BP_CHECK
|
830
|
+
if (debug_context->frames[debug_context->stack_size - 1].info.runtime.bp_check <= thread->cfp->bp_check)
|
831
|
+
#else
|
814
832
|
if (debug_context->frames[debug_context->stack_size - 1].info.runtime.bp <= thread->cfp->bp)
|
833
|
+
#endif
|
815
834
|
break;
|
816
835
|
debug_context->stack_size--;
|
817
836
|
}
|
@@ -859,37 +878,6 @@ debug_event_hook(rb_event_flag_t event, VALUE data, VALUE self, ID mid, VALUE kl
|
|
859
878
|
{
|
860
879
|
case RUBY_EVENT_LINE:
|
861
880
|
{
|
862
|
-
if (CTX_FL_TEST(debug_context, CTX_FL_CATCHING))
|
863
|
-
{
|
864
|
-
debug_frame_t *top_frame = get_top_frame(debug_context);
|
865
|
-
|
866
|
-
if (top_frame != NULL)
|
867
|
-
{
|
868
|
-
rb_control_frame_t *cfp = top_frame->info.runtime.cfp;
|
869
|
-
VALUE hit_count;
|
870
|
-
int c_hit_count;
|
871
|
-
rb_iseq_t *iseq = cfp->iseq;
|
872
|
-
|
873
|
-
if (iseq != NULL) {
|
874
|
-
/* restore the proper catch table */
|
875
|
-
iseq->catch_table_size = debug_context->catch_table.old_catch_table_size;
|
876
|
-
iseq->catch_table = debug_context->catch_table.old_catch_table;
|
877
|
-
}
|
878
|
-
|
879
|
-
/* send catchpoint notification */
|
880
|
-
c_hit_count = FIX2INT(rb_hash_aref(rdebug_catchpoints, debug_context->catch_table.mod_name)) + 1;
|
881
|
-
hit_count = INT2FIX(c_hit_count);
|
882
|
-
rb_hash_aset(rdebug_catchpoints, debug_context->catch_table.mod_name, hit_count);
|
883
|
-
debug_context->stop_reason = CTX_STOP_CATCHPOINT;
|
884
|
-
rb_funcall(context, idAtCatchpoint, 1, debug_context->catch_table.errinfo);
|
885
|
-
if(self && binding == Qnil)
|
886
|
-
binding = create_binding(self);
|
887
|
-
save_top_binding(debug_context, binding);
|
888
|
-
call_at_line(context, debug_context, rb_str_new2(top_frame->file), INT2FIX(top_frame->line));
|
889
|
-
}
|
890
|
-
|
891
|
-
break;
|
892
|
-
}
|
893
881
|
if(debug_context->stack_size == 0 ||
|
894
882
|
get_top_frame(debug_context)->info.runtime.block_iseq != thread->cfp->block_iseq ||
|
895
883
|
get_top_frame(debug_context)->info.runtime.cfp->iseq != thread->cfp->iseq)
|
@@ -987,7 +975,11 @@ debug_event_hook(rb_event_flag_t event, VALUE data, VALUE self, ID mid, VALUE kl
|
|
987
975
|
while(debug_context->stack_size > 0)
|
988
976
|
{
|
989
977
|
debug_context->stack_size--;
|
978
|
+
#if VM_DEBUG_BP_CHECK
|
979
|
+
if (debug_context->frames[debug_context->stack_size].info.runtime.bp_check <= GET_THREAD()->cfp->bp_check)
|
980
|
+
#else
|
990
981
|
if (debug_context->frames[debug_context->stack_size].info.runtime.bp <= GET_THREAD()->cfp->bp)
|
982
|
+
#endif
|
991
983
|
break;
|
992
984
|
}
|
993
985
|
CTX_FL_SET(debug_context, CTX_FL_ENABLE_BKPT);
|
@@ -1006,13 +998,6 @@ debug_event_hook(rb_event_flag_t event, VALUE data, VALUE self, ID mid, VALUE kl
|
|
1006
998
|
VALUE expn_class, aclass;
|
1007
999
|
int i;
|
1008
1000
|
|
1009
|
-
if (CTX_FL_TEST(debug_context, CTX_FL_CATCHING)) {
|
1010
|
-
/* we're re-raising exception after processing line event,
|
1011
|
-
now allow the next exception to be caught, don't setup catchers */
|
1012
|
-
CTX_FL_UNSET(debug_context, CTX_FL_CATCHING);
|
1013
|
-
break;
|
1014
|
-
}
|
1015
|
-
|
1016
1001
|
if(debug == Qtrue) {
|
1017
1002
|
fprintf(stderr, "stack_size %d\n", debug_context->stack_size);
|
1018
1003
|
for (i = 0; i < debug_context->stack_size; i++) {
|
@@ -1071,25 +1056,20 @@ debug_event_hook(rb_event_flag_t event, VALUE data, VALUE self, ID mid, VALUE kl
|
|
1071
1056
|
if (hit_count != Qnil)
|
1072
1057
|
{
|
1073
1058
|
debug_frame_t *top_frame = get_top_frame(debug_context);
|
1074
|
-
|
1075
|
-
|
1059
|
+
VALUE hit_count;
|
1060
|
+
int c_hit_count;
|
1076
1061
|
|
1077
|
-
|
1078
|
-
|
1079
|
-
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
iseq->catch_table_size = 1;
|
1089
|
-
iseq->catch_table =
|
1090
|
-
create_catch_table(debug_context, top_frame->info.runtime.last_pc - cfp->iseq->iseq_encoded - insn_len(BIN(trace)));
|
1091
|
-
break;
|
1092
|
-
}
|
1062
|
+
/* send catchpoint notification */
|
1063
|
+
hit_count = rb_hash_aref(rdebug_catchpoints, mod_name);
|
1064
|
+
c_hit_count = (hit_count != Qnil ? FIX2INT(hit_count) : 0) + 1;
|
1065
|
+
hit_count = INT2FIX(c_hit_count);
|
1066
|
+
rb_hash_aset(rdebug_catchpoints, mod_name, hit_count);
|
1067
|
+
debug_context->stop_reason = CTX_STOP_CATCHPOINT;
|
1068
|
+
rb_funcall(context, idAtCatchpoint, 1, rb_errinfo());
|
1069
|
+
if(self && binding == Qnil)
|
1070
|
+
binding = create_binding(self);
|
1071
|
+
save_top_binding(debug_context, binding);
|
1072
|
+
call_at_line(context, debug_context, rb_str_new2(top_frame->file), INT2FIX(top_frame->line));
|
1093
1073
|
}
|
1094
1074
|
}
|
1095
1075
|
|
@@ -1931,8 +1911,11 @@ copy_scalar_args(debug_frame_t *debug_frame)
|
|
1931
1911
|
for (i = 0; i < iseq->argc; i++)
|
1932
1912
|
{
|
1933
1913
|
if (!rb_is_local_id(iseq->local_table[i])) continue; /* skip flip states */
|
1934
|
-
|
1914
|
+
#ifdef HAVE_RB_CONTROL_FRAME_T_EP
|
1915
|
+
val = *(cfp->ep - iseq->local_size + i);
|
1916
|
+
#else
|
1935
1917
|
val = *(cfp->dfp - iseq->local_size + i);
|
1918
|
+
#endif
|
1936
1919
|
|
1937
1920
|
if (arg_value_is_small(val))
|
1938
1921
|
rb_ary_push(debug_frame->arg_ary, val);
|
@@ -1993,7 +1976,11 @@ context_copy_locals(debug_context_t *debug_context, debug_frame_t *debug_frame,
|
|
1993
1976
|
{
|
1994
1977
|
VALUE str = rb_id2str(iseq->local_table[i]);
|
1995
1978
|
if (str != 0)
|
1979
|
+
#ifdef HAVE_RB_CONTROL_FRAME_T_EP
|
1980
|
+
rb_hash_aset(hash, str, *(cfp->ep - iseq->local_size + i));
|
1981
|
+
#else
|
1996
1982
|
rb_hash_aset(hash, str, *(cfp->dfp - iseq->local_size + i));
|
1983
|
+
#endif
|
1997
1984
|
}
|
1998
1985
|
}
|
1999
1986
|
|
@@ -2011,7 +1998,11 @@ context_copy_locals(debug_context_t *debug_context, debug_frame_t *debug_frame,
|
|
2011
1998
|
{
|
2012
1999
|
VALUE str = rb_id2str(iseq->local_table[i]);
|
2013
2000
|
if (str != 0)
|
2001
|
+
#ifdef HAVE_RB_CONTROL_FRAME_T_EP
|
2002
|
+
rb_hash_aset(hash, str, *(block_frame->ep - iseq->local_table_size + i - 1));
|
2003
|
+
#else
|
2014
2004
|
rb_hash_aset(hash, str, *(block_frame->dfp - iseq->local_table_size + i - 1));
|
2005
|
+
#endif
|
2015
2006
|
}
|
2016
2007
|
return(hash);
|
2017
2008
|
}
|
@@ -2478,11 +2469,24 @@ context_jump(VALUE self, VALUE line, VALUE file)
|
|
2478
2469
|
/* find target frame to jump to */
|
2479
2470
|
while (RUBY_VM_VALID_CONTROL_FRAME_P(cfp, cfp_end))
|
2480
2471
|
{
|
2472
|
+
#ifdef HAVE_RB_ISEQ_T_LOCATION
|
2473
|
+
if ((cfp->iseq != NULL) && (rb_str_cmp(file, cfp->iseq->location.path) == 0))
|
2474
|
+
#else
|
2481
2475
|
if ((cfp->iseq != NULL) && (rb_str_cmp(file, cfp->iseq->filename) == 0))
|
2476
|
+
#endif
|
2482
2477
|
{
|
2478
|
+
#ifdef HAVE_RB_ISEQ_T_LINE_INFO_SIZE
|
2479
|
+
for (i = 0; i < cfp->iseq->line_info_size; i++)
|
2480
|
+
#else
|
2483
2481
|
for (i = 0; i < cfp->iseq->insn_info_size; i++)
|
2482
|
+
#endif
|
2484
2483
|
{
|
2484
|
+
#ifdef HAVE_RB_ISEQ_T_LINE_INFO_SIZE
|
2485
|
+
if (cfp->iseq->line_info_table[i].line_no != line)
|
2486
|
+
#else
|
2485
2487
|
if (cfp->iseq->insn_info_table[i].line_no != line)
|
2488
|
+
#endif
|
2489
|
+
|
2486
2490
|
continue;
|
2487
2491
|
|
2488
2492
|
/* hijack the currently running code so that we can change the frame PC */
|
@@ -2492,8 +2496,13 @@ context_jump(VALUE self, VALUE line, VALUE file)
|
|
2492
2496
|
cfp_start->pc[1] = (VALUE)do_jump;
|
2493
2497
|
|
2494
2498
|
debug_context->jump_cfp = cfp;
|
2499
|
+
#ifdef HAVE_RB_ISEQ_T_LINE_INFO_SIZE
|
2500
|
+
debug_context->jump_pc =
|
2501
|
+
cfp->iseq->iseq_encoded + cfp->iseq->line_info_table[i].position;
|
2502
|
+
#else
|
2495
2503
|
debug_context->jump_pc =
|
2496
2504
|
cfp->iseq->iseq_encoded + cfp->iseq->insn_info_table[i].position;
|
2505
|
+
#endif
|
2497
2506
|
|
2498
2507
|
return(INT2FIX(0)); /* success */
|
2499
2508
|
}
|
data/ext/ruby_debug/ruby_debug.h
CHANGED
data/lib/ruby-debug-base.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'ruby_debug'
|
2
2
|
require 'rubygems'
|
3
|
-
require 'linecache19'
|
4
3
|
|
5
4
|
module Debugger
|
6
5
|
|
@@ -90,19 +89,6 @@ module Debugger
|
|
90
89
|
end
|
91
90
|
context
|
92
91
|
end
|
93
|
-
|
94
|
-
def source_reload
|
95
|
-
LineCache::clear_file_cache
|
96
|
-
end
|
97
|
-
|
98
|
-
# Get line +line_number+ from file named +filename+. Return "\n"
|
99
|
-
# there was a problem. Leaking blanks are stripped off.
|
100
|
-
def line_at(filename, line_number) # :nodoc:
|
101
|
-
@reload_on_change=nil unless defined?(@reload_on_change)
|
102
|
-
line = LineCache::getline(filename, line_number, @reload_on_change)
|
103
|
-
return "\n" unless line
|
104
|
-
return "#{line.gsub(/^\s+/, '').chomp}\n"
|
105
|
-
end
|
106
92
|
|
107
93
|
#
|
108
94
|
# Activates the post-mortem mode. There are two ways of using it:
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-debug-base19x
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.30.
|
4
|
+
version: 0.11.30.pre12
|
5
5
|
prerelease: 8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,52 +9,40 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-03-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement:
|
15
|
+
name: debugger-ruby_core_source
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 1.1.4
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: ruby_core_source
|
27
|
-
requirement: &70196555530700 !ruby/object:Gem::Requirement
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
25
|
none: false
|
29
26
|
requirements:
|
30
27
|
- - ! '>='
|
31
28
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
33
|
-
type: :runtime
|
34
|
-
prerelease: false
|
35
|
-
version_requirements: *70196555530700
|
29
|
+
version: 1.1.4
|
36
30
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement:
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
39
33
|
none: false
|
40
34
|
requirements:
|
41
35
|
- - ! '>='
|
42
36
|
- !ruby/object:Gem::Version
|
43
|
-
version: 0.
|
37
|
+
version: 0.8.1
|
44
38
|
type: :runtime
|
45
39
|
prerelease: false
|
46
|
-
version_requirements:
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: rake
|
49
|
-
requirement: &70196555527340 !ruby/object:Gem::Requirement
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
41
|
none: false
|
51
42
|
requirements:
|
52
43
|
- - ! '>='
|
53
44
|
- !ruby/object:Gem::Version
|
54
45
|
version: 0.8.1
|
55
|
-
type: :runtime
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: *70196555527340
|
58
46
|
description: ! 'ruby-debug is a fast implementation of the standard Ruby debugger
|
59
47
|
debug.rb.
|
60
48
|
|
@@ -104,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
92
|
version: 1.3.1
|
105
93
|
requirements: []
|
106
94
|
rubyforge_project: ruby-debug19
|
107
|
-
rubygems_version: 1.8.
|
95
|
+
rubygems_version: 1.8.25
|
108
96
|
signing_key:
|
109
97
|
specification_version: 3
|
110
98
|
summary: Fast Ruby debugger - core component
|