rbtrace 0.3.18 → 0.3.19

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ae8cd64167eb2f3275caf66175c00370018c43fe
4
+ data.tar.gz: 8d389f4891f37cbbb9e93c4e623542ba213bd88c
5
+ SHA512:
6
+ metadata.gz: 54aef3a098fb9be86926238e33fe47fea73d64f89aa3762a282ebf71d6bdb7010eb40b51afe3738b79852eacd1fa2387e4e8795d503ffd878e1be44eeeeb1470
7
+ data.tar.gz: 115be7ca55f189ad6a1a5dfcc0f84346752141ab6a9b8dab3b42ed545af78d72261d92411778599143aa2b6d5a833ca90756572133cc7e26bc3de7f9ce5ec56c
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
  gemspec
data/Gemfile.lock CHANGED
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbtrace (0.3.16)
4
+ rbtrace (0.3.18)
5
5
  ffi (>= 1.0.6)
6
6
  msgpack (>= 0.4.3)
7
7
  trollop (>= 1.16.2)
8
8
 
9
9
  GEM
10
- remote: http://rubygems.org/
10
+ remote: https://rubygems.org/
11
11
  specs:
12
12
  ffi (1.0.11)
13
13
  msgpack (0.4.6)
data/bin/rbtrace CHANGED
@@ -43,7 +43,7 @@ module MsgQ
43
43
  end
44
44
 
45
45
  def self.recv_cmd(q, block=true)
46
- MsgQ.rb_enable_interrupt if RUBY_VERSION > '1.9'
46
+ MsgQ.rb_enable_interrupt if RUBY_VERSION > '1.9' && RUBY_VERSION < '2.0'
47
47
 
48
48
  msg = EventMsg.new
49
49
  ret = MsgQ.msgrcv(q, msg, BUF_SIZE, 0, block ? 0 : IPC_NOWAIT)
@@ -57,7 +57,7 @@ module MsgQ
57
57
 
58
58
  msg[:buf].to_ptr.read_string_length(BUF_SIZE)
59
59
  ensure
60
- MsgQ.rb_disable_interrupt if RUBY_VERSION > '1.9'
60
+ MsgQ.rb_disable_interrupt if RUBY_VERSION > '1.9' && RUBY_VERSION < '2.0'
61
61
  end
62
62
  end
63
63
 
@@ -65,7 +65,7 @@ module MsgQ
65
65
  attach_function :msgrcv, [:int, EventMsg.ptr, :size_t, :long, :int], :int
66
66
  attach_function :msgsnd, [:int, EventMsg.ptr, :size_t, :int], :int
67
67
 
68
- if RUBY_VERSION > '1.9'
68
+ if RUBY_VERSION > '1.9' && RUBY_VERSION < '2.0'
69
69
  attach_function :rb_enable_interrupt, [], :void
70
70
  attach_function :rb_disable_interrupt, [], :void
71
71
  end
@@ -629,18 +629,37 @@ class RBTracer
629
629
  @max_nesting = nesting if nesting > @max_nesting
630
630
  @last_nesting = nesting
631
631
 
632
- when 'gc'
632
+ when 'gc_start'
633
633
  time, = *cmd
634
+ @gc_start = time
635
+ print 'garbage_collect'
634
636
 
637
+ when 'gc_end'
638
+ time, = *cmd
639
+ diff = time - @gc_start
640
+ # if @gc_mark
641
+ # mark = ((@gc_mark - @gc_start) * 100.0 / diff).to_i
642
+ # print '(mark: %d%%, sweep: %d%%)' % [mark, 100-mark]
643
+ # end
644
+ print ' <%f>' % (diff/1_000_000.0) if @show_duration
645
+ @gc_start = nil
635
646
  newline
636
- if @show_time
637
- t = Time.at(time/1_000_000)
638
- print t.strftime("%H:%M:%S.")
639
- print "%06d " % (time - t.to_f*1_000_000).round
647
+
648
+ when 'gc'
649
+ time, = *cmd
650
+ @gc_mark = time
651
+
652
+ unless @gc_start
653
+ newline
654
+ if @show_time
655
+ t = Time.at(time/1_000_000)
656
+ print t.strftime("%H:%M:%S.")
657
+ print "%06d " % (time - t.to_f*1_000_000).round
658
+ end
659
+ print @prefix*@last_nesting if @last_nesting > 0
660
+ print "garbage_collect"
661
+ puts if @watch_slow
640
662
  end
641
- print @prefix*@last_nesting if @last_nesting > 0
642
- print "garbage_collect"
643
- puts if @watch_slow
644
663
 
645
664
  else
646
665
  puts "unknown event #{event}: #{cmd.inspect}"
@@ -870,7 +889,7 @@ EOS
870
889
  list = `ps aux`.split("\n")
871
890
  filtered = list.grep(Regexp.new opts[:ps])
872
891
  filtered.reject! do |line|
873
- line =~ /^\w+\s+#{Process.pid}\s+/ # cannot trace self
892
+ line =~ /^\w+\s+(#{Process.pid}|#{Process.ppid})\s+/ # cannot trace self
874
893
  end
875
894
 
876
895
  if filtered.size > 0
data/ext/extconf.rb CHANGED
@@ -57,6 +57,7 @@ unless have_library('msgpackc_ext') and have_header('msgpack.h')
57
57
  end
58
58
 
59
59
  have_func('rb_during_gc', 'ruby.h')
60
+ have_func('rb_gc_add_event_hook', ['ruby.h', 'node.h'])
60
61
 
61
62
  # increase message size on linux
62
63
  if RUBY_PLATFORM =~ /linux/
data/ext/rbtrace.c CHANGED
@@ -304,8 +304,10 @@ event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
304
304
  if (in_event_hook) return;
305
305
  in_event_hook++;
306
306
 
307
+ #ifdef ID_ALLOCATOR
307
308
  // skip allocators
308
309
  if (mid == ID_ALLOCATOR) goto out;
310
+ #endif
309
311
 
310
312
  #ifdef RUBY_VM
311
313
  if (mid == 0) {
@@ -531,6 +533,29 @@ event_hook_remove()
531
533
  }
532
534
  }
533
535
 
536
+ #ifdef HAVE_RB_GC_ADD_EVENT_HOOK
537
+ // requires https://github.com/tmm1/brew2deb/blob/master/packages/ruby/patches/gc-hooks.patch
538
+ static void
539
+ rbtrace_gc_event_hook(rb_gc_event_t gc_event, VALUE obj)
540
+ {
541
+ switch(gc_event)
542
+ {
543
+ case RUBY_GC_EVENT_START:
544
+ rbtrace__send_event(1,
545
+ "gc_start",
546
+ 'n'
547
+ );
548
+ break;
549
+ case RUBY_GC_EVENT_END:
550
+ rbtrace__send_event(1,
551
+ "gc_end",
552
+ 'n'
553
+ );
554
+ break;
555
+ }
556
+ }
557
+ #endif
558
+
534
559
  static int
535
560
  rbtracer_remove(char *query, int id)
536
561
  {
@@ -609,6 +634,11 @@ rbtracer_detach()
609
634
  if (rbtracer.klass_tbl)
610
635
  st_free_table(rbtracer.klass_tbl);
611
636
  rbtracer.klass_tbl = NULL;
637
+
638
+ event_hook_remove();
639
+ #ifdef HAVE_RB_GC_ADD_EVENT_HOOK
640
+ rb_gc_remove_event_hook(rbtrace_gc_event_hook);
641
+ #endif
612
642
  }
613
643
 
614
644
  static int
@@ -900,6 +930,9 @@ rbtrace__process_event(msgpack_object cmd)
900
930
 
901
931
  } else if (0 == strncmp("gc", str.ptr, str.size)) {
902
932
  rbtracer.gc = true;
933
+ #ifdef HAVE_RB_GC_ADD_EVENT_HOOK
934
+ rb_gc_add_event_hook(rbtrace_gc_event_hook, RUBY_GC_EVENT_START|RUBY_GC_EVENT_END);
935
+ #endif
903
936
 
904
937
  } else if (0 == strncmp("devmode", str.ptr, str.size)) {
905
938
  rbtracer.devmode = true;
data/rbtrace.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rbtrace'
3
- s.version = '0.3.18'
3
+ s.version = '0.3.19'
4
4
  s.homepage = 'http://github.com/tmm1/rbtrace'
5
5
 
6
6
  s.authors = 'Aman Gupta'
data/server.rb CHANGED
@@ -38,7 +38,7 @@ while true
38
38
  reload_test.call
39
39
  Test.run
40
40
 
41
- fib(1024*100)
41
+ #fib(1024*100)
42
42
  end
43
43
  }.call
44
44
  end
data/test.sh CHANGED
@@ -24,28 +24,24 @@ trace() {
24
24
  echo ./bin/rbtrace -p $PID $*
25
25
  echo ------------------------------------------
26
26
  ./bin/rbtrace -p $PID $* &
27
- sleep 5
27
+ sleep 2
28
28
  kill $!
29
29
  wait $! || true
30
30
  echo
31
31
  }
32
32
 
33
- # bin/rbtrace -m sleep --wait 2 --exec ruby -e '10.times{ sleep 0.5 }'
34
-
35
- trace --slowcpu=500
36
-
37
- # trace -m Test.run --devmode
38
- # trace -m sleep
39
- # trace -m sleep Dir.chdir Dir.pwd Process.pid "String#gsub" "String#*"
40
- # trace -m "Kernel#"
41
- # trace -m "String#gsub(self,@test)" "String#*(self,__source__)" "String#multiply_vowels(self,self.length,num)"
42
- # trace --gc --slow=200
43
- # trace --gc -m Dir.
44
- # trace --slow=250
45
- # trace --slow=250 --slow-methods sleep
46
- # trace --gc -m Dir. --slow=250 --slow-methods sleep
47
- # trace --gc -m Dir. --slow=250
48
- # trace -m Process. Dir.pwd "Proc#call"
33
+ trace -m Test.run --devmode
34
+ trace -m sleep
35
+ trace -m sleep Dir.chdir Dir.pwd Process.pid "String#gsub" "String#*"
36
+ trace -m "Kernel#"
37
+ trace -m "String#gsub(self,@test)" "String#*(self,__source__)" "String#multiply_vowels(self,self.length,num)"
38
+ trace --gc --slow=200
39
+ trace --gc -m Dir.
40
+ trace --slow=250
41
+ trace --slow=250 --slow-methods sleep
42
+ trace --gc -m Dir. --slow=250 --slow-methods sleep
43
+ trace --gc -m Dir. --slow=250
44
+ trace -m Process. Dir.pwd "Proc#call"
49
45
  # trace --firehose
50
46
 
51
47
  cleanup
metadata CHANGED
@@ -1,80 +1,66 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rbtrace
3
- version: !ruby/object:Gem::Version
4
- hash: 55
5
- prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 18
10
- version: 0.3.18
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.19
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Aman Gupta
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2012-01-04 00:00:00 -08:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
11
+ date: 2013-02-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
22
14
  name: ffi
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 27
30
- segments:
31
- - 1
32
- - 0
33
- - 6
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
34
19
  version: 1.0.6
35
20
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: trollop
39
21
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 83
46
- segments:
47
- - 1
48
- - 16
49
- - 2
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.6
27
+ - !ruby/object:Gem::Dependency
28
+ name: trollop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
50
33
  version: 1.16.2
51
34
  type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: msgpack
55
35
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- hash: 9
62
- segments:
63
- - 0
64
- - 4
65
- - 3
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.16.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: msgpack
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
66
47
  version: 0.4.3
67
48
  type: :runtime
68
- version_requirements: *id003
69
- description: rbtrace shows you method calls happening inside another ruby process in real time.
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.4.3
55
+ description: rbtrace shows you method calls happening inside another ruby process
56
+ in real time.
70
57
  email: aman@tmm1.net
71
- executables:
58
+ executables:
72
59
  - rbtrace
73
- extensions:
60
+ extensions:
74
61
  - ext/extconf.rb
75
62
  extra_rdoc_files: []
76
-
77
- files:
63
+ files:
78
64
  - .gitignore
79
65
  - Gemfile
80
66
  - Gemfile.lock
@@ -94,39 +80,28 @@ files:
94
80
  - tracers/redis.tracer
95
81
  - tracers/testunit.tracer
96
82
  - tracers/unicorn.tracer
97
- has_rdoc: true
98
83
  homepage: http://github.com/tmm1/rbtrace
99
84
  licenses: []
100
-
85
+ metadata: {}
101
86
  post_install_message:
102
87
  rdoc_options: []
103
-
104
- require_paths:
88
+ require_paths:
105
89
  - lib
106
- required_ruby_version: !ruby/object:Gem::Requirement
107
- none: false
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- hash: 3
112
- segments:
113
- - 0
114
- version: "0"
115
- required_rubygems_version: !ruby/object:Gem::Requirement
116
- none: false
117
- requirements:
118
- - - ">="
119
- - !ruby/object:Gem::Version
120
- hash: 3
121
- segments:
122
- - 0
123
- version: "0"
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
124
100
  requirements: []
125
-
126
101
  rubyforge_project:
127
- rubygems_version: 1.6.2
102
+ rubygems_version: 2.0.0
128
103
  signing_key:
129
- specification_version: 3
130
- summary: "rbtrace: like strace but for ruby code"
104
+ specification_version: 4
105
+ summary: 'rbtrace: like strace but for ruby code'
131
106
  test_files: []
132
-
107
+ has_rdoc: