ruby-debug 0.7.3-mswin32 → 0.7.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 +7 -1
- data/ext/ruby_debug.c +42 -13
- data/lib/ruby-debug/commands/frame.rb +6 -6
- data/lib/ruby_debug.so +0 -0
- metadata +2 -2
data/CHANGES
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
0.7.4
|
2
|
+
- Added a workaround of the Ruby interpreter problem where a method created with Module#define_method
|
3
|
+
and which raises an exception doesn't trigger a :return event, this way screwing the stack trace.
|
4
|
+
- Fixed a situation of an array 'out of bounds' access.
|
5
|
+
- Fixed the help for 'where' command.
|
6
|
+
|
1
7
|
0.7.3
|
2
8
|
- Fixed a case when a frame is not popped up properly.
|
3
9
|
- Removed Context.ignore= method, since it can result with the segmentation fault error.
|
@@ -5,7 +11,7 @@
|
|
5
11
|
- Fixed several cases of seg faults when accessing dyna_vars structure.
|
6
12
|
|
7
13
|
0.7.2
|
8
|
-
- Fixed Context#resume (a thread should be waked up only when it was running when it
|
14
|
+
- Fixed Context#resume (a thread should be waked up only when it was running when it was suspended).
|
9
15
|
- When handling post-mortem exception, all threads must be suspended.
|
10
16
|
|
11
17
|
0.7.1
|
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.
|
7
|
+
#define DEBUG_VERSION "0.7.4"
|
8
8
|
|
9
9
|
#ifdef _WIN32
|
10
10
|
struct FRAME {
|
@@ -71,6 +71,7 @@ RUBY_EXTERN struct RVarmap *ruby_dyna_vars;
|
|
71
71
|
typedef struct {
|
72
72
|
VALUE binding;
|
73
73
|
ID id;
|
74
|
+
ID orig_id;
|
74
75
|
int line;
|
75
76
|
const char * file;
|
76
77
|
short dead;
|
@@ -127,6 +128,7 @@ static VALUE tracing = Qfalse;
|
|
127
128
|
static VALUE locker = Qnil;
|
128
129
|
static VALUE post_mortem = Qfalse;
|
129
130
|
static VALUE keep_frame_binding = Qfalse;
|
131
|
+
static VALUE debug = Qfalse;
|
130
132
|
|
131
133
|
static VALUE last_context = Qnil;
|
132
134
|
static VALUE last_thread = Qnil;
|
@@ -523,6 +525,7 @@ save_call_frame(rb_event_t event, VALUE self, char *file, int line, ID mid, debu
|
|
523
525
|
debug_frame->line = line;
|
524
526
|
debug_frame->binding = binding;
|
525
527
|
debug_frame->id = mid;
|
528
|
+
debug_frame->orig_id = mid;
|
526
529
|
debug_frame->dead = 0;
|
527
530
|
debug_frame->self = self;
|
528
531
|
debug_frame->info.runtime.frame = ruby_frame;
|
@@ -683,7 +686,7 @@ save_top_binding(debug_context_t *debug_context, VALUE binding)
|
|
683
686
|
}
|
684
687
|
|
685
688
|
inline static void
|
686
|
-
set_frame_source(rb_event_t event, debug_context_t *debug_context, VALUE self, char *file, int line)
|
689
|
+
set_frame_source(rb_event_t event, debug_context_t *debug_context, VALUE self, char *file, int line, ID mid)
|
687
690
|
{
|
688
691
|
debug_frame_t *top_frame;
|
689
692
|
top_frame = get_top_frame(debug_context);
|
@@ -692,6 +695,7 @@ set_frame_source(rb_event_t event, debug_context_t *debug_context, VALUE self, c
|
|
692
695
|
top_frame->self = self;
|
693
696
|
top_frame->file = file;
|
694
697
|
top_frame->line = line;
|
698
|
+
top_frame->id = mid;
|
695
699
|
top_frame->info.runtime.dyna_vars = event == RUBY_EVENT_C_CALL ? NULL : ruby_dyna_vars;
|
696
700
|
}
|
697
701
|
}
|
@@ -747,7 +751,7 @@ debug_event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
747
751
|
hook_count++;
|
748
752
|
|
749
753
|
if (mid == ID_ALLOCATOR) return;
|
750
|
-
|
754
|
+
|
751
755
|
thread = rb_thread_current();
|
752
756
|
thread_context_lookup(thread, &context, &debug_context);
|
753
757
|
|
@@ -785,23 +789,29 @@ debug_event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
785
789
|
/* ignore a skipped section of code */
|
786
790
|
if(CTX_FL_TEST(debug_context, CTX_FL_SKIPPED)) goto cleanup;
|
787
791
|
|
788
|
-
if(!node && !(event == RUBY_EVENT_RETURN || event == RUBY_EVENT_C_RETURN))
|
789
|
-
goto cleanup;
|
790
|
-
|
791
792
|
if(node)
|
792
793
|
{
|
793
794
|
file = node->nd_file;
|
794
795
|
line = nd_line(node);
|
795
|
-
|
796
|
+
|
797
|
+
if(debug == Qtrue)
|
798
|
+
fprintf(stderr, "%s:%d [%s] %s\n", file, line, get_event_name(event), rb_id2name(mid));
|
796
799
|
|
797
|
-
|
798
|
-
|
800
|
+
if(DID_MOVED)
|
801
|
+
CTX_FL_SET(debug_context, CTX_FL_MOVED);
|
802
|
+
}
|
803
|
+
else if(event != RUBY_EVENT_RETURN && event != RUBY_EVENT_C_RETURN)
|
804
|
+
{
|
805
|
+
if(debug == Qtrue)
|
806
|
+
fprintf(stderr, "return [%s] %s\n", get_event_name(event), rb_id2name(mid));
|
807
|
+
goto cleanup;
|
808
|
+
}
|
799
809
|
|
800
810
|
switch(event)
|
801
811
|
{
|
802
812
|
case RUBY_EVENT_LINE:
|
803
813
|
{
|
804
|
-
set_frame_source(event, debug_context, self, file, line);
|
814
|
+
set_frame_source(event, debug_context, self, file, line, mid);
|
805
815
|
|
806
816
|
if(RTEST(tracing) || CTX_FL_TEST(debug_context, CTX_FL_TRACING))
|
807
817
|
rb_funcall(context, idAtTracing, 2, rb_str_new2(file), INT2FIX(line));
|
@@ -850,7 +860,7 @@ debug_event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
850
860
|
}
|
851
861
|
case RUBY_EVENT_C_CALL:
|
852
862
|
{
|
853
|
-
set_frame_source(event, debug_context, self, file, line);
|
863
|
+
set_frame_source(event, debug_context, self, file, line, mid);
|
854
864
|
break;
|
855
865
|
}
|
856
866
|
case RUBY_EVENT_CALL:
|
@@ -883,8 +893,12 @@ debug_event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
883
893
|
debug_context->stop_next = 1;
|
884
894
|
debug_context->stop_frame = 0;
|
885
895
|
}
|
886
|
-
|
896
|
+
while(debug_context->stack_size > 0)
|
897
|
+
{
|
887
898
|
debug_context->stack_size--;
|
899
|
+
if(debug_context->frames[debug_context->stack_size].orig_id == mid)
|
900
|
+
break;
|
901
|
+
}
|
888
902
|
break;
|
889
903
|
}
|
890
904
|
case RUBY_EVENT_CLASS:
|
@@ -898,7 +912,7 @@ debug_event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
898
912
|
VALUE expn_class, aclass;
|
899
913
|
int i;
|
900
914
|
|
901
|
-
set_frame_source(event, debug_context, self, file, line);
|
915
|
+
set_frame_source(event, debug_context, self, file, line, mid);
|
902
916
|
|
903
917
|
if(post_mortem == Qtrue && self)
|
904
918
|
{
|
@@ -1423,6 +1437,19 @@ debug_set_keep_frame_binding(VALUE self, VALUE value)
|
|
1423
1437
|
return value;
|
1424
1438
|
}
|
1425
1439
|
|
1440
|
+
static VALUE
|
1441
|
+
debug_debug(VALUE self)
|
1442
|
+
{
|
1443
|
+
return debug;
|
1444
|
+
}
|
1445
|
+
|
1446
|
+
static VALUE
|
1447
|
+
debug_set_debug(VALUE self, VALUE value)
|
1448
|
+
{
|
1449
|
+
debug = RTEST(value) ? Qtrue : Qfalse;
|
1450
|
+
return value;
|
1451
|
+
}
|
1452
|
+
|
1426
1453
|
static VALUE
|
1427
1454
|
debug_thread_inherited(VALUE klass)
|
1428
1455
|
{
|
@@ -2111,6 +2138,8 @@ Init_ruby_debug()
|
|
2111
2138
|
rb_define_module_function(mDebugger, "post_mortem=", debug_set_post_mortem, 1);
|
2112
2139
|
rb_define_module_function(mDebugger, "keep_frame_binding?", debug_keep_frame_binding, 0);
|
2113
2140
|
rb_define_module_function(mDebugger, "keep_frame_binding=", debug_set_keep_frame_binding, 1);
|
2141
|
+
rb_define_module_function(mDebugger, "debug", debug_debug, 0);
|
2142
|
+
rb_define_module_function(mDebugger, "debug=", debug_set_debug, 1);
|
2114
2143
|
|
2115
2144
|
cThreadsTable = rb_define_class_under(mDebugger, "ThreadsTable", rb_cObject);
|
2116
2145
|
|
@@ -26,7 +26,7 @@ module Debugger
|
|
26
26
|
@state.file = @state.context.frame_file(@state.frame_pos)
|
27
27
|
@state.line = @state.context.frame_line(@state.frame_pos)
|
28
28
|
|
29
|
-
|
29
|
+
print_frame(@state.frame_pos, true)
|
30
30
|
end
|
31
31
|
|
32
32
|
def get_int(str, cmd)
|
@@ -38,10 +38,10 @@ module Debugger
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
42
|
-
printf "\032\032" if ENV['EMACS']
|
41
|
+
def print_frame(pos, adjust = false)
|
43
42
|
file, line, id = @state.context.frame_file(pos), @state.context.frame_line(pos), @state.context.frame_id(pos)
|
44
|
-
"#%d %s:%
|
43
|
+
print "#%d %s:%d%s\n", pos, file, line, id ? " in `#{id.id2name}'" : ""
|
44
|
+
print "\032\032%s:%d\n", file, line if ENV['EMACS'] && adjust
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -59,13 +59,13 @@ module Debugger
|
|
59
59
|
else
|
60
60
|
print " "
|
61
61
|
end
|
62
|
-
|
62
|
+
print_frame(idx)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
class << self
|
67
67
|
def help_command
|
68
|
-
%w|where
|
68
|
+
%w|where backtrace|
|
69
69
|
end
|
70
70
|
|
71
71
|
def help(cmd)
|
data/lib/ruby_debug.so
CHANGED
Binary file
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.1
|
|
3
3
|
specification_version: 1
|
4
4
|
name: ruby-debug
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.7.
|
7
|
-
date: 2007-02-
|
6
|
+
version: 0.7.4
|
7
|
+
date: 2007-02-05 17:50:34 -05:00
|
8
8
|
summary: Fast Ruby debugger
|
9
9
|
require_paths:
|
10
10
|
- lib
|