ruby-debug-base19x 0.11.30.pre → 0.11.30.pre2
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 +1 -0
- data/ext/ruby_debug/ruby_debug.c +72 -23
- metadata +10 -10
data/Rakefile
CHANGED
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.pre2"
|
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)))
|
@@ -476,7 +476,7 @@ call_at_line_unprotected(VALUE args)
|
|
476
476
|
{
|
477
477
|
VALUE context;
|
478
478
|
context = *RARRAY_PTR(args);
|
479
|
-
return rb_funcall2(context, idAtLine, RARRAY_LEN(args) - 1, RARRAY_PTR(args) + 1);
|
479
|
+
return rb_funcall2(context, idAtLine, (int)RARRAY_LEN(args) - 1, RARRAY_PTR(args) + 1);
|
480
480
|
}
|
481
481
|
|
482
482
|
static VALUE
|
@@ -536,8 +536,8 @@ int
|
|
536
536
|
filename_cmp(VALUE source, char *file)
|
537
537
|
{
|
538
538
|
char *source_ptr, *file_ptr;
|
539
|
-
|
540
|
-
|
539
|
+
long s_len, f_len, min_len;
|
540
|
+
long s,f;
|
541
541
|
int dirsep_flag = 0;
|
542
542
|
|
543
543
|
s_len = RSTRING_LEN(source);
|
@@ -644,8 +644,10 @@ inline static int
|
|
644
644
|
c_call_new_frame_p(VALUE klass, ID mid)
|
645
645
|
{
|
646
646
|
klass = real_class(klass);
|
647
|
+
// if ((klass == rb_mKernel) && (strcmp(rb_id2name(mid), "raise") == 0)) return 0;
|
648
|
+
|
647
649
|
if(rb_block_given_p()) return 1;
|
648
|
-
if(klass == rb_cProc || klass == rb_mKernel || klass == rb_cModule) return 1;
|
650
|
+
if(klass == rb_cProc || klass == rb_mKernel || klass == rb_cModule /*|| klass == rb_cFixnum*/) return 1;
|
649
651
|
return 0;
|
650
652
|
}
|
651
653
|
|
@@ -851,6 +853,36 @@ debug_event_hook(rb_event_flag_t event, VALUE data, VALUE self, ID mid, VALUE kl
|
|
851
853
|
{
|
852
854
|
case RUBY_EVENT_LINE:
|
853
855
|
{
|
856
|
+
if (CTX_FL_TEST(debug_context, CTX_FL_CATCHING))
|
857
|
+
{
|
858
|
+
debug_frame_t *top_frame = get_top_frame(debug_context);
|
859
|
+
|
860
|
+
if (top_frame != NULL)
|
861
|
+
{
|
862
|
+
rb_control_frame_t *cfp = top_frame->info.runtime.cfp;
|
863
|
+
VALUE hit_count;
|
864
|
+
rb_iseq_t *iseq = cfp->iseq;
|
865
|
+
|
866
|
+
if (iseq != NULL) {
|
867
|
+
/* restore the proper catch table */
|
868
|
+
iseq->catch_table_size = debug_context->catch_table.old_catch_table_size;
|
869
|
+
iseq->catch_table = debug_context->catch_table.old_catch_table;
|
870
|
+
}
|
871
|
+
|
872
|
+
/* send catchpoint notification */
|
873
|
+
int c_hit_count = FIX2INT(rb_hash_aref(rdebug_catchpoints, debug_context->catch_table.mod_name)) + 1;
|
874
|
+
hit_count = INT2FIX(c_hit_count);
|
875
|
+
rb_hash_aset(rdebug_catchpoints, debug_context->catch_table.mod_name, hit_count);
|
876
|
+
debug_context->stop_reason = CTX_STOP_CATCHPOINT;
|
877
|
+
rb_funcall(context, idAtCatchpoint, 1, debug_context->catch_table.errinfo);
|
878
|
+
if(self && binding == Qnil)
|
879
|
+
binding = create_binding(self);
|
880
|
+
save_top_binding(debug_context, binding);
|
881
|
+
call_at_line(context, debug_context, rb_str_new2(top_frame->file), INT2FIX(top_frame->line));
|
882
|
+
}
|
883
|
+
|
884
|
+
break;
|
885
|
+
}
|
854
886
|
if(debug_context->stack_size == 0 ||
|
855
887
|
get_top_frame(debug_context)->info.runtime.block_iseq != thread->cfp->block_iseq ||
|
856
888
|
get_top_frame(debug_context)->info.runtime.cfp->iseq != thread->cfp->iseq)
|
@@ -967,11 +999,23 @@ debug_event_hook(rb_event_flag_t event, VALUE data, VALUE self, ID mid, VALUE kl
|
|
967
999
|
}
|
968
1000
|
case RUBY_EVENT_RAISE:
|
969
1001
|
{
|
1002
|
+
if (CTX_FL_TEST(debug_context, CTX_FL_CATCHING)) {
|
1003
|
+
/* we're re-raising exception after processing line event,
|
1004
|
+
now allow the next exception to be caught, don't setup catchers */
|
1005
|
+
CTX_FL_UNSET(debug_context, CTX_FL_CATCHING);
|
1006
|
+
break;
|
1007
|
+
}
|
1008
|
+
|
970
1009
|
VALUE ancestors;
|
971
1010
|
VALUE expn_class, aclass;
|
972
1011
|
int i;
|
973
1012
|
|
974
|
-
|
1013
|
+
if(debug == Qtrue) {
|
1014
|
+
fprintf(stderr, "stack_size %d\n", debug_context->stack_size);
|
1015
|
+
for (i = 0; i < debug_context->stack_size; i++) {
|
1016
|
+
fprintf(stderr, "%s:%d, iseq: %p\n", FRAME_N(i)->file, FRAME_N(i)->line, FRAME_N(i)->info.runtime.cfp->iseq);
|
1017
|
+
}
|
1018
|
+
}
|
975
1019
|
|
976
1020
|
if(post_mortem == Qtrue && self)
|
977
1021
|
{
|
@@ -1025,19 +1069,24 @@ debug_event_hook(rb_event_flag_t event, VALUE data, VALUE self, ID mid, VALUE kl
|
|
1025
1069
|
{
|
1026
1070
|
debug_frame_t *top_frame = get_top_frame(debug_context);
|
1027
1071
|
rb_control_frame_t *cfp = top_frame->info.runtime.cfp;
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1032
|
-
|
1033
|
-
|
1034
|
-
|
1035
|
-
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1072
|
+
rb_iseq_t *iseq = cfp->iseq;
|
1073
|
+
|
1074
|
+
debug_context->catch_table.mod_name = mod_name;
|
1075
|
+
debug_context->catch_table.errinfo = rb_errinfo();
|
1076
|
+
CTX_FL_SET(debug_context, CTX_FL_CATCHING);
|
1077
|
+
if (iseq != NULL) {
|
1078
|
+
|
1079
|
+
/* save the current catch table */
|
1080
|
+
debug_context->catch_table.old_catch_table_size = iseq->catch_table_size;
|
1081
|
+
debug_context->catch_table.old_catch_table = iseq->catch_table;
|
1082
|
+
|
1083
|
+
|
1084
|
+
/* create a new catch table to catch this exception, and put it in the current iseq */
|
1085
|
+
iseq->catch_table_size = 1;
|
1086
|
+
iseq->catch_table =
|
1087
|
+
create_catch_table(debug_context, top_frame->info.runtime.last_pc - cfp->iseq->iseq_encoded - insn_len(BIN(trace)));
|
1088
|
+
break;
|
1089
|
+
}
|
1041
1090
|
}
|
1042
1091
|
}
|
1043
1092
|
|
@@ -1691,7 +1740,7 @@ check_frame_number(debug_context_t *debug_context, VALUE frame)
|
|
1691
1740
|
return frame_n;
|
1692
1741
|
}
|
1693
1742
|
|
1694
|
-
static
|
1743
|
+
static long
|
1695
1744
|
optional_frame_position(int argc, VALUE *argv) {
|
1696
1745
|
unsigned int i_scanned;
|
1697
1746
|
VALUE level;
|
@@ -2317,7 +2366,7 @@ FUNC_FASTCALL(do_jump)(rb_thread_t *th, rb_control_frame_t *cfp)
|
|
2317
2366
|
+1 for target frame
|
2318
2367
|
+1 for array terminator
|
2319
2368
|
*/
|
2320
|
-
|
2369
|
+
long frames = jump_cfp - cfp + 2;
|
2321
2370
|
debug_context->old_iseq_catch = (iseq_catch_t*)malloc(frames * sizeof(iseq_catch_t));
|
2322
2371
|
MEMZERO(debug_context->old_iseq_catch, iseq_catch_t, frames);
|
2323
2372
|
frames = 0;
|
@@ -2361,7 +2410,7 @@ context_jump(VALUE self, VALUE line, VALUE file)
|
|
2361
2410
|
{
|
2362
2411
|
debug_context_t *debug_context;
|
2363
2412
|
debug_frame_t *debug_frame;
|
2364
|
-
|
2413
|
+
unsigned i;
|
2365
2414
|
rb_thread_t *th;
|
2366
2415
|
rb_control_frame_t *cfp;
|
2367
2416
|
rb_control_frame_t *cfp_end;
|
@@ -2385,7 +2434,7 @@ context_jump(VALUE self, VALUE line, VALUE file)
|
|
2385
2434
|
if (cfp->pc == debug_frame->info.runtime.last_pc)
|
2386
2435
|
{
|
2387
2436
|
cfp_start = cfp;
|
2388
|
-
if ((cfp->pc - cfp->iseq->iseq_encoded) >= (cfp->iseq->iseq_size - 1))
|
2437
|
+
if ((unsigned)(cfp->pc - cfp->iseq->iseq_encoded) >= (cfp->iseq->iseq_size - 1))
|
2389
2438
|
return(INT2FIX(1)); /* no space for opt_call_c_function hijack */
|
2390
2439
|
break;
|
2391
2440
|
}
|
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.pre2
|
5
5
|
prerelease: 8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-08-
|
12
|
+
date: 2011-08-13 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: columnize
|
16
|
-
requirement: &
|
16
|
+
requirement: &70261391956160 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.3.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70261391956160
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: ruby_core_source
|
27
|
-
requirement: &
|
27
|
+
requirement: &70261391955680 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.1.4
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70261391955680
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: linecache19
|
38
|
-
requirement: &
|
38
|
+
requirement: &70261391955200 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.5.11
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70261391955200
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rake
|
49
|
-
requirement: &
|
49
|
+
requirement: &70261391971120 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: 0.8.1
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70261391971120
|
58
58
|
description: ! 'ruby-debug is a fast implementation of the standard Ruby debugger
|
59
59
|
debug.rb.
|
60
60
|
|