rbtrace 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/bin/rbtrace +16 -5
- data/ext/rbtrace.c +1 -1
- data/rbtrace.gemspec +1 -1
- metadata +3 -3
data/README.md
CHANGED
@@ -119,7 +119,7 @@ rbtrace works on ruby 1.8 and 1.9, running on linux or mac osx.
|
|
119
119
|
|
120
120
|
### get values of variables and other expressions
|
121
121
|
|
122
|
-
% rbtrace -p 87854 -m "String#gsub(self)" "String#*(self)" "String#multiply_vowels(self, self.length, num)"
|
122
|
+
% rbtrace -p 87854 -m "String#gsub(self, @test)" "String#*(self)" "String#multiply_vowels(self, self.length, num)"
|
123
123
|
*** attached to process 87854
|
124
124
|
|
125
125
|
String#multiply_vowels(self="hello", self.length=5, num=3)
|
data/bin/rbtrace
CHANGED
@@ -63,8 +63,15 @@ class RBTracer
|
|
63
63
|
if File.exists?(msgmnb = "/proc/sys/kernel/msgmnb")
|
64
64
|
curr = File.read(msgmnb).to_i
|
65
65
|
max = 1024*1024
|
66
|
+
cmd = "sysctl kernel.msgmnb=#{max}"
|
67
|
+
|
66
68
|
if curr < max
|
67
|
-
|
69
|
+
if Process.uid == 0
|
70
|
+
STDERR.puts "*** running `#{cmd}` for you to prevent losing events (currently: #{curr} bytes)"
|
71
|
+
system(cmd)
|
72
|
+
else
|
73
|
+
STDERR.puts "*** run `sudo #{cmd}` to prevent losing events (currently: #{curr} bytes)"
|
74
|
+
end
|
68
75
|
end
|
69
76
|
end
|
70
77
|
end
|
@@ -122,7 +129,7 @@ class RBTracer
|
|
122
129
|
rescue Errno::ESRCH
|
123
130
|
raise ArgumentError, 'invalid pid'
|
124
131
|
rescue Errno::EPERM
|
125
|
-
raise ArgumentError, 'could not signal process
|
132
|
+
raise ArgumentError, 'could not signal process, are you running as root?'
|
126
133
|
end
|
127
134
|
|
128
135
|
Process.kill 'URG', @pid
|
@@ -148,7 +155,7 @@ class RBTracer
|
|
148
155
|
@nesting = 0
|
149
156
|
@last_tracer = nil
|
150
157
|
@out = STDOUT
|
151
|
-
@prefix = '
|
158
|
+
@prefix = ' '
|
152
159
|
@show_time = false
|
153
160
|
@show_duration = true
|
154
161
|
end
|
@@ -241,6 +248,10 @@ class RBTracer
|
|
241
248
|
|
242
249
|
def recv_cmd(block=true)
|
243
250
|
MsgQ::EventMsg.recv_cmd(@qi, block)
|
251
|
+
rescue Errno::EINTR
|
252
|
+
# on linux, an incoming signal will interrupt msgrcv()
|
253
|
+
# regardless of what SA_RESTART is set to
|
254
|
+
retry
|
244
255
|
end
|
245
256
|
|
246
257
|
def print(*args)
|
@@ -379,7 +390,7 @@ class RBTracer
|
|
379
390
|
parser = Trollop::Parser.new do
|
380
391
|
version <<-EOS
|
381
392
|
rbtrace: like strace, but for ruby code
|
382
|
-
version 0.2.
|
393
|
+
version 0.2.7
|
383
394
|
(c) 2011 Aman Gupta (tmm1)
|
384
395
|
http://github.com/tmm1/rbtrace
|
385
396
|
EOS
|
@@ -460,7 +471,7 @@ EOS
|
|
460
471
|
|
461
472
|
opt :prefix,
|
462
473
|
"prefix nested method calls with N spaces",
|
463
|
-
:default =>
|
474
|
+
:default => 2,
|
464
475
|
:short => '-r'
|
465
476
|
|
466
477
|
opt :config,
|
data/ext/rbtrace.c
CHANGED
@@ -262,7 +262,7 @@ event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
262
262
|
} else if (len > 2 && expr[0] == '@' && expr[1] != '@') {
|
263
263
|
val = rb_inspect(rb_ivar_get(self, rb_intern(expr)));
|
264
264
|
|
265
|
-
} else
|
265
|
+
} else {
|
266
266
|
snprintf(buffer, len+150, "(begin; ObjectSpace._id2ref(%p >> 1).instance_eval{ %s }; rescue Exception => e; e; end).inspect", (void*)self, expr);
|
267
267
|
val = rb_eval_string_protect(buffer, 0);
|
268
268
|
}
|
data/rbtrace.gemspec
CHANGED
metadata
CHANGED