rbtrace 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README.md +1 -1
  2. data/bin/rbtrace +16 -5
  3. data/ext/rbtrace.c +1 -1
  4. data/rbtrace.gemspec +1 -1
  5. 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
- STDERR.puts "*** run `sudo sysctl kernel.msgmnb=#{max}` to prevent losing events (currently: #{curr} bytes)"
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 (run as root)'
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.6
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 => 1,
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 if (event == RUBY_EVENT_CALL) {
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
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rbtrace'
3
- s.version = '0.2.6'
3
+ s.version = '0.2.7'
4
4
  s.homepage = 'http://github.com/tmm1/rbtrace'
5
5
 
6
6
  s.authors = "Aman Gupta"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbtrace
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 6
10
- version: 0.2.6
9
+ - 7
10
+ version: 0.2.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Aman Gupta