Since there may be a lot of Ghost Methods inside a ruby gem, I don't think it is a good idea to study the inner mechanism of a ruby gem just by reading its source code statically. Is there a way to attach the source file of a third-part gem to a running ruby process for debugging so that I can set break point and see how things work dynamically ?
BTW,I've tried to navigate to the source file of a third-part gem in RubyMine by clicking on the context menu "Go To->Implementations" of the 'require' statement or other symbol of an third-part gem( require 'watir'
for example ), without success. Is it normal for an IDE of a dynamic typing language such as Ruby to fail a symbol navigation?
First of all you must install ruby-debug. immediately before the line you wish to start debugging. Next step: run your unit tests as you would do normaly. At the moment that ruby reaches the line that contain the debugger directive it will stop and show you a console prompt.
wherever you'd like the application to "break" - that is, executing byebug is equivalent to putting a breakpoint in your code. Run the program and use the debugger commands once you reach the breakpoint. near the end. Restart your server.
I would love to know if there's a better way to do this, but how I usually do it is:
bundle show gemname
. I'm on a Mac so I usually pipe this to pbcopy so it gets copied to my clipboard. bundle show rails | pbcopy
mvim /path/to/gem/directory
debugger
above the line in question.p variable_name
), and move line by line with the ruby debugger commands.*Knowing where to put the breakpoint can take some understanding of the code, but you should start in lib/gemname.rb
I would avoid editing the Gem files as suggested in the currently accepted answer. Instead, put the debugger
command in one of your app files and use the break
command to set a breakpoint in the gem. I'm using rvm
with a gemset
so here is how I do it:
break /Users/chris/.rvm/gems/ruby-1.9.3-p125@<gemset>/gems/<gem_name>-<gem-version>/<path_to_file>:<line_number>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With