rbtrace 0.2.4 → 0.2.5
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/bin/rbtrace +2 -2
- data/ext/rbtrace.c +5 -6
- data/rbtrace.gemspec +1 -1
- data/server.rb +1 -1
- metadata +3 -3
data/bin/rbtrace
CHANGED
@@ -132,7 +132,7 @@ class RBTracer
|
|
132
132
|
@qo = MsgQ.msgget(-pid, 0666)
|
133
133
|
|
134
134
|
if @qi == -1 || @qo == -1
|
135
|
-
raise ArgumentError, 'pid is not listening for messages
|
135
|
+
raise ArgumentError, 'pid is not listening for messages, did you `require "rbtrace"`'
|
136
136
|
end
|
137
137
|
|
138
138
|
@tracers = Hash.new{ |h,k|
|
@@ -376,7 +376,7 @@ class RBTracer
|
|
376
376
|
opts = Trollop.options do
|
377
377
|
version <<-EOS
|
378
378
|
rbtrace: like strace, but for ruby code
|
379
|
-
version 0.2.
|
379
|
+
version 0.2.5
|
380
380
|
(c) 2011 Aman Gupta (tmm1)
|
381
381
|
http://github.com/tmm1/rbtrace
|
382
382
|
EOS
|
data/ext/rbtrace.c
CHANGED
@@ -220,6 +220,7 @@ event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
220
220
|
if (!rbtracer.list[i].klass || rbtracer.list[i].klass == klass) {
|
221
221
|
if (!rbtracer.list[i].self || rbtracer.list[i].self == self) {
|
222
222
|
tracer = &rbtracer.list[i];
|
223
|
+
break;
|
223
224
|
}
|
224
225
|
}
|
225
226
|
}
|
@@ -248,24 +249,22 @@ event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
248
249
|
size_t len = strlen(expr);
|
249
250
|
|
250
251
|
VALUE val = Qnil;
|
251
|
-
char buffer[len+
|
252
|
+
char buffer[len+150];
|
252
253
|
char *result = NULL;
|
253
254
|
|
254
255
|
if (len == 4 && strcmp("self", expr) == 0) {
|
255
256
|
val = rb_inspect(self);
|
256
257
|
|
257
258
|
} else if (len == 10 && strcmp("__source__", expr) == 0) {
|
258
|
-
snprintf(buffer, len+
|
259
|
+
snprintf(buffer, len+150, "\"%s:%d\"", rb_sourcefile(), rb_sourceline());
|
259
260
|
result = buffer;
|
260
261
|
|
261
262
|
} else if (len > 1 && expr[0] == '@') {
|
262
263
|
val = rb_inspect(rb_ivar_get(self, rb_intern(expr)));
|
263
264
|
|
264
265
|
} else if (event == RUBY_EVENT_CALL) {
|
265
|
-
snprintf(buffer, len+
|
266
|
-
|
267
|
-
VALUE str = rb_str_new2(buffer);
|
268
|
-
val = rb_obj_instance_eval(1, &str, self);
|
266
|
+
snprintf(buffer, len+150, "(begin; ObjectSpace._id2ref(%p >> 1).instance_eval{ %s }; rescue Exception => e; e; end).inspect", (void*)self, expr);
|
267
|
+
val = rb_eval_string_protect(buffer, 0);
|
269
268
|
}
|
270
269
|
|
271
270
|
if (RTEST(val) && TYPE(val) == T_STRING) {
|
data/rbtrace.gemspec
CHANGED
data/server.rb
CHANGED
metadata
CHANGED