rbtrace 0.3.15 → 0.3.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/Gemfile.lock +1 -1
  2. data/bin/rbtrace +67 -7
  3. data/rbtrace.gemspec +1 -1
  4. data/test.sh +13 -12
  5. metadata +4 -4
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbtrace (0.3.15)
4
+ rbtrace (0.3.16)
5
5
  ffi (>= 1.0.6)
6
6
  msgpack (>= 0.4.3)
7
7
  trollop (>= 1.16.2)
data/bin/rbtrace CHANGED
@@ -658,7 +658,7 @@ class RBTracer
658
658
  parser = Trollop::Parser.new do
659
659
  version <<-EOS
660
660
  rbtrace: like strace, but for ruby code
661
- version 0.3.13
661
+ version 0.3.16
662
662
  (c) 2011 Aman Gupta (tmm1)
663
663
  http://github.com/tmm1/rbtrace
664
664
  EOS
@@ -672,7 +672,10 @@ for examples and more information, see http://github.com/tmm1/rbtrace
672
672
 
673
673
  Usage:
674
674
 
675
- rbtrace -p <PID> # trace the given process
675
+ rbtrace --exec <CMD> # run and trace <CMD>
676
+ rbtrace --pid <PID+> # trace the given process(es)
677
+ rbtrace --ps <CMD> # look for running <CMD> processes to trace
678
+
676
679
  rbtrace -o <FILE> # write output to file
677
680
  rbtrace -t # show method call start time
678
681
  rbtrace -n # hide duration of each method call
@@ -709,11 +712,21 @@ Trace Expressions:
709
712
  All Options:\n
710
713
 
711
714
  EOS
715
+ opt :exec,
716
+ "spawn new ruby process and attach to it",
717
+ :type => :strings,
718
+ :short => nil
719
+
712
720
  opt :pid,
713
721
  "pid of the ruby process to trace",
714
722
  :type => :ints,
715
723
  :short => '-p'
716
724
 
725
+ opt :ps,
726
+ "find any matching processes to trace",
727
+ :type => :string,
728
+ :short => nil
729
+
717
730
  opt :firehose,
718
731
  "show all method calls",
719
732
  :short => '-f'
@@ -774,11 +787,6 @@ EOS
774
787
  :type => String,
775
788
  :short => '-e'
776
789
 
777
- opt :exec,
778
- "spawn new ruby process and attach to it",
779
- :type => :strings,
780
- :short => nil
781
-
782
790
  opt :wait,
783
791
  "seconds to wait before attaching to process",
784
792
  :default => 0,
@@ -853,6 +861,58 @@ EOS
853
861
 
854
862
  tracee = nil
855
863
 
864
+ if opts[:ps_given]
865
+ list = `ps aux`.split("\n")
866
+ filtered = list.grep(Regexp.new opts[:ps])
867
+ filtered.reject! do |line|
868
+ line =~ /^\w+\s+#{Process.pid}\s+/ # cannot trace self
869
+ end
870
+
871
+ if filtered.size > 0
872
+ max_len = filtered.size.to_s.size
873
+
874
+ STDERR.puts "*** found #{filtered.size} processes matching #{opts[:ps].inspect}"
875
+ filtered.each_with_index do |line, i|
876
+ STDERR.puts " [#{(i+1).to_s.rjust(max_len)}] #{line.strip}"
877
+ end
878
+ STDERR.puts " [0] all #{filtered.size} processes"
879
+
880
+ while true
881
+ STDERR.sync = true
882
+ STDERR.print "*** trace which processes? (0/1,4): "
883
+
884
+ begin
885
+ input = gets
886
+ rescue Interrupt
887
+ exit 1
888
+ end
889
+
890
+ if input =~ /^(\d+,?)+$/
891
+ if input.strip == '0'
892
+ pids = filtered.map do |line|
893
+ line.split[1].to_i
894
+ end
895
+ else
896
+ indices = input.split(',').map(&:to_i)
897
+ pids = indices.map do |i|
898
+ if i > 0 and line = filtered[i-1]
899
+ line.split[1].to_i
900
+ end
901
+ end
902
+ end
903
+
904
+ unless pids.include?(nil)
905
+ opts[:pid] = pids
906
+ break
907
+ end
908
+ end
909
+ end
910
+ else
911
+ STDERR.puts "*** could not find any processes matching #{opts[:ps].inspect}"
912
+ exit 1
913
+ end
914
+ end
915
+
856
916
  if opts[:exec_given]
857
917
  tracee = fork{
858
918
  Process.setsid
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.15'
3
+ s.version = '0.3.16'
4
4
  s.homepage = 'http://github.com/tmm1/rbtrace'
5
5
 
6
6
  s.authors = 'Aman Gupta'
data/test.sh CHANGED
@@ -30,18 +30,19 @@ trace() {
30
30
  echo
31
31
  }
32
32
 
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"
33
+ bin/rbtrace -m sleep --wait 2 --exec ruby -e '10.times{ sleep 0.5 }'
34
+ #trace -m Test.run --devmode
35
+ #trace -m sleep
36
+ #trace -m sleep Dir.chdir Dir.pwd Process.pid "String#gsub" "String#*"
37
+ #trace -m "Kernel#"
38
+ #trace -m "String#gsub(self,@test)" "String#*(self,__source__)" "String#multiply_vowels(self,self.length,num)"
39
+ #trace --gc --slow=200
40
+ #trace --gc -m Dir.
41
+ #trace --slow=250
42
+ #trace --slow=250 --slow-methods sleep
43
+ #trace --gc -m Dir. --slow=250 --slow-methods sleep
44
+ #trace --gc -m Dir. --slow=250
45
+ #trace -m Process. Dir.pwd "Proc#call"
45
46
  # trace --firehose
46
47
 
47
48
  cleanup
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: 13
4
+ hash: 51
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 15
10
- version: 0.3.15
9
+ - 16
10
+ version: 0.3.16
11
11
  platform: ruby
12
12
  authors:
13
13
  - Aman Gupta
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-23 00:00:00 -08:00
18
+ date: 2011-11-25 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency