Debugging Ruby Methods at Runtime
Due to the dynamic nature of Ruby, it is hard to locate a method definition statically. Thus, we can only find the method definition accurately at runtime. Here are some tips.
Suppose we have an object called
foo. We can use
foo.methods to find which methods are available for this object. However, calling
foo.methods may get a long method list. To avoid this, we can filter the ones we are interested in by a regular expression. For example, we can call
foo.methods.grep(/bar/) to find all the
foo's methods whose names contain the word bar.
If we want to further inspect the method
bar of object
foo. We can find which class defines the method bar by calling
foo.method(:bar).owner. To find the location of the file which defines the method, we can call
source_location returns the source code location and the line number of the method.
To investigate the calling stack of the method
bar, we can print the calling stack out by calling
puts caller in the method body of