rbtrace 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- 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