debase 0.1.2 → 0.1.3.beta1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6db61940f1aaef2f04f52469fa21fdf00513daea
4
- data.tar.gz: 9d32ec37844e491ca6c84042b0c8cb18135cde40
3
+ metadata.gz: c12b5c66970a15c8070dc6ce49a074c549a85fad
4
+ data.tar.gz: b41b9cf71db312290e1f6470cbcc092fb9cfdd4f
5
5
  SHA512:
6
- metadata.gz: 053810fcee3048a773d6fba24960288f08d4cec893c9aacc346368a36fe99f7cd3c487482e6e25e880f5ae09382e0371011213654a3903cf1c8cf0a6186977d1
7
- data.tar.gz: e88dd24fcd59c59ecb22997f7478b090cfb7ef681ecf3b22c9189a8c2a8feda44417d2f68df75d55d9a866300a38ed209d39140a5615fc3c28e1bb2b8c382507
6
+ metadata.gz: 045c4f73b463635eae68dbc1119dd1658aa53740f6a1d7594745472654cdb37f77e494f697051a69eb9fa84cb282cd2b744063786dff0f0e7812030396c2a301
7
+ data.tar.gz: cf1cd09d4ad03af0a0ad1a84b6927e71db577636276cdd5595fd28747cf18325fa5a1735d8b92250e6cfd957860e521b8d0743de9ed6cbc5291044cdd9a5ed10
@@ -133,9 +133,12 @@ Context_free(debug_context_t *context) {
133
133
  extern VALUE
134
134
  context_create(VALUE thread, VALUE cDebugThread) {
135
135
  debug_context_t *context;
136
+ VALUE locations;
136
137
 
137
138
  context = ALLOC(debug_context_t);
138
139
  context->stack_size = 0;
140
+ locations = rb_funcall(thread, rb_intern("backtrace_locations"), 1, INT2FIX(1));
141
+ context->calced_stack_size = locations != Qnil ? (int)RARRAY_LEN(locations) : 0;
139
142
  context->stack = NULL;
140
143
  context->thnum = ++thnum_current;
141
144
  context->thread = thread;
@@ -306,15 +309,15 @@ Context_step_over(int argc, VALUE *argv, VALUE self)
306
309
  rb_scan_args(argc, argv, "12", &lines, &frame, &force);
307
310
  context->stop_line = FIX2INT(lines);
308
311
  CTX_FL_UNSET(context, CTX_FL_STEPPED);
309
- if(frame == Qnil)
312
+ if (frame == Qnil)
310
313
  {
311
- context->dest_frame = context->stack_size;
314
+ context->dest_frame = context->calced_stack_size;
312
315
  }
313
316
  else
314
317
  {
315
- if(FIX2INT(frame) < 0 && FIX2INT(frame) >= context->stack_size)
318
+ if (FIX2INT(frame) < 0 && FIX2INT(frame) >= context->calced_stack_size)
316
319
  rb_raise(rb_eRuntimeError, "Destination frame is out of range.");
317
- context->dest_frame = context->stack_size - FIX2INT(frame);
320
+ context->dest_frame = context->calced_stack_size - FIX2INT(frame);
318
321
  }
319
322
  if(RTEST(force))
320
323
  CTX_FL_SET(context, CTX_FL_FORCE_MOVE);
@@ -106,6 +106,21 @@ check_start_processing(debug_context_t *context, VALUE thread)
106
106
  return 1;
107
107
  }
108
108
 
109
+ static inline const char*
110
+ symbol2str(VALUE symbol)
111
+ {
112
+ VALUE id;
113
+ static const char* nil_str= "nil";
114
+ if (symbol == Qnil) {
115
+ return nil_str;
116
+ }
117
+ id = SYM2ID(symbol);
118
+ if (symbol == Qnil) {
119
+ return nil_str;
120
+ }
121
+ return rb_id2name(id);
122
+ }
123
+
109
124
  static inline void
110
125
  print_event(rb_trace_point_t *tp, debug_context_t *context)
111
126
  {
@@ -120,9 +135,11 @@ print_event(rb_trace_point_t *tp, debug_context_t *context)
120
135
  line = rb_tracearg_lineno(tp);
121
136
  event = rb_tracearg_event(tp);
122
137
  mid = rb_tracearg_method_id(tp);
123
- fprintf(stderr, "%s: file=%s, line=%d, mid=%s\n", rb_id2name(SYM2ID(event)), RSTRING_PTR(path), FIX2INT(line), rb_id2name(SYM2ID(mid)));
138
+ fprintf(stderr, "%s: file=%s, line=%d, mid=%s\n", symbol2str(event), RSTRING_PTR(path), FIX2INT(line), symbol2str(mid));
124
139
  locations = rb_funcall(context->thread, rb_intern("backtrace_locations"), 1, INT2FIX(1));
125
- fprintf(stderr, " stack_size=%d, thread=%d, real_stack_size=%d\n", context->stack_size, context->thnum, (int)RARRAY_LEN(locations));
140
+ fprintf(stderr, " calced_stack_size=%d, stack_size=%d, thread=%d, real_stack_size=%d\n",
141
+ context->calced_stack_size, context->stack_size, context->thnum,
142
+ locations != Qnil ? (int)RARRAY_LEN(locations) : 0);
126
143
  }
127
144
  }
128
145
 
@@ -211,7 +228,7 @@ process_line_event(VALUE trace_point, void *data)
211
228
  strcmp(context->last_file, file) != 0;
212
229
  }
213
230
 
214
- if(context->dest_frame == -1 || context->stack_size == context->dest_frame)
231
+ if (context->dest_frame == -1 || context->calced_stack_size == context->dest_frame)
215
232
  {
216
233
  if(moved || !CTX_FL_TEST(context, CTX_FL_FORCE_MOVE))
217
234
  context->stop_next--;
@@ -223,7 +240,7 @@ process_line_event(VALUE trace_point, void *data)
223
240
  CTX_FL_UNSET(context, CTX_FL_STEPPED);
224
241
  }
225
242
  }
226
- else if(context->stack_size < context->dest_frame)
243
+ else if(context->calced_stack_size < context->dest_frame)
227
244
  {
228
245
  context->stop_next = 0;
229
246
  }
@@ -252,6 +269,7 @@ process_return_event(VALUE trace_point, void *data)
252
269
  Data_Get_Struct(context_object, debug_context_t, context);
253
270
  if (!check_start_processing(context, rb_thread_current())) return;
254
271
 
272
+ --context->calced_stack_size;
255
273
  update_stack_size(context);
256
274
  if(context->stack_size == context->stop_frame)
257
275
  {
@@ -274,6 +292,7 @@ process_call_event(VALUE trace_point, void *data)
274
292
  Data_Get_Struct(context_object, debug_context_t, context);
275
293
  if (!check_start_processing(context, rb_thread_current())) return;
276
294
 
295
+ ++context->calced_stack_size;
277
296
  update_stack_size(context);
278
297
  print_event(TRACE_POINT, context);
279
298
  cleanup(context);
@@ -323,7 +342,7 @@ process_raise_event(VALUE trace_point, void *data)
323
342
 
324
343
  static VALUE
325
344
  Debase_setup_tracepoints(VALUE self)
326
- {
345
+ {
327
346
  if (catchpoints != Qnil) return Qnil;
328
347
  contexts = rb_hash_new();
329
348
  breakpoints = rb_ary_new();
@@ -49,11 +49,14 @@ typedef struct debug_context {
49
49
 
50
50
  ctx_stop_reason stop_reason;
51
51
  int stop_next;
52
- int dest_frame;
53
52
  int stop_line;
54
53
  int stop_frame;
55
54
  int thread_pause;
56
55
 
56
+ /* dest_frame uses calced_stack_size for stepping */
57
+ int dest_frame;
58
+ int calced_stack_size;
59
+
57
60
  char *last_file;
58
61
  int last_line;
59
62
  } debug_context_t;
@@ -49,6 +49,24 @@ module Debase
49
49
  def add_catchpoint(exception)
50
50
  catchpoints[exception] = 0
51
51
  end
52
+
53
+ #call-seq:
54
+ # Debase.skip { block } -> obj or nil
55
+ #
56
+ #The code inside of the block is escaped from the debugger.
57
+ def skip
58
+ #it looks like no-op is ok for this method for now
59
+ #no-op
60
+ end
61
+
62
+ #call-seq:
63
+ # Debugger.last_interrupted -> context
64
+ #
65
+ #Returns last debugged context.
66
+ def last_context
67
+ # not sure why we need this so let's return nil for now ;)
68
+ nil
69
+ end
52
70
  end
53
71
 
54
72
  class DebugThread < Thread
@@ -1,3 +1,3 @@
1
1
  module Debase
2
- VERSION = "0.1.2" unless defined? VERSION
2
+ VERSION = "0.1.3.beta1" unless defined? VERSION
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: debase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dennis Ushakov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-26 00:00:00.000000000 Z
11
+ date: 2015-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: debase-ruby_core_source
@@ -125,9 +125,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  requirements:
128
- - - ">="
128
+ - - ">"
129
129
  - !ruby/object:Gem::Version
130
- version: '0'
130
+ version: 1.3.1
131
131
  requirements: []
132
132
  rubyforge_project: debase
133
133
  rubygems_version: 2.2.2