From: Richard Date: 2006-12-02T03:20:04+09:00 Subject: Re: Is there a simply way to get every method log itself before running? Hi Phrogz, There's nothing like having working code to really get one's head into new software. Thanks a lot for passing it along. Looks great! I have started play with Needles on http://needle.rubyforge.org/chapter-1.html. I got the first example working ... only had to stick in a "requires" stmt. I'm struggling with the 2nd example. I'll follow both approaches for a little while. Best wishes, Richard Phrogz wrote: > Richard wrote: > > Thanks for pointing me to that kernel method. I've got to study the > > example(s) and construct a few of my own to apply it well. > > Here's my own example, since I've never played with it before: > > slim:~/Desktop gavinkistner$ ruby tmp.rb > Hello, Bob > Hello, Gavin > > > > slim:~/Desktop gavinkistner$ ruby -d tmp.rb > > Person#initialize called (line 3) > > > Person#initialize called (line 3) > > > Person#greet_first called (line 9) > --Person#greet called (line 6) > Hello, Bob > -- > --Person#respond called (line 13) > ----Person#greet called (line 6) > Hello, Gavin > ---- > -- > > > Object#recurse_down called (line 18) > --Object#recurse_down called (line 18) > ----Object#recurse_down called (line 18) > ------Object#recurse_down called (line 18) > --------Object#recurse_down called (line 18) > ----------Object#recurse_down called (line 18) > ------------Object#recurse_down called (line 18) > ------------ > ---------- > -------- > ------ > ---- > -- > > > > > slim:~/Desktop gavinkistner$ cat tmp.rb > class Person > attr_reader :name > def initialize( name ) > @name = name > end > def greet( someone ) > puts "Hello, #{someone.name}" > end > def greet_first( someone ) > greet( someone ) > someone.respond( self ) # Social Obligation! > end > def respond( someone ) > greet( someone ) > end > end > > def recurse_down( count=6 ) > if count > 0 > recurse_down( count-1 ) > end > end > > if $DEBUG > set_trace_func lambda{ |event, file, line, id, binding, classname| > $indent ||= 0 > > # Only deal with events that occur inside this file > return unless file == __FILE__ > > # Only deal with calls to my functions > case event > when 'call' > print $indent==0 ? "\n" : '--'*$indent > puts "#{classname}##{id} called (line #{line})" > $indent += 1 > > when 'return' > $indent -= 1 > print "--" * $indent > puts "" > > end > } > end > > gk = Person.new( 'Gavin' ) > bk = Person.new( 'Bob' ) > gk.greet_first( bk ) > > recurse_down