-
Notifications
You must be signed in to change notification settings - Fork 347
Debugging
If you want to have a ruby-debug-like-debugger method to insert a VS breakpoint via Ruby code
You can also use set_trace_func for a simple debugging experience.
Using Visual Studio allows you to use an IDE to set breakpoints, step into code, etc. This works very well for debugging the IronRuby runtime. Debugging Ruby code works reasonably well, but is a work in progress.
In the Debug tab of the Project properties for Ruby.Console.csproj, set the fields as follows:
- Start Action:
For Ruby.Console.csproj, “Start project” should be enabled.
For any other project, “Start external program:” should be enabled and set to “c:\vsl\Merlin\Main\Bin\Debug\ir.exe”
- Start Options:
You can leave “Command line arguments” empty to get the REPL loop, or set it to the path to some .rb file to run the .rb file. Hitting F5 should now run the .rb file under VS, and allows you to set breakpoints as you would expect in IronRuby.dll and IronRuby.Libraries.dll (ie. in C# source code).
If you want to put breakpoints in Ruby code, make sure to remove the -X:Interpret option and instead add the -D option (which will cause IronRuby to use the debuggable System.Reflection.Emit.AssemblyBuilder instead of the non-debuggable System.Reflection.Emit.DynamicMethod).
h3. Debugging a single RubySpec example
The recommended way to run RubySpec with mspec ci
spawns a new process for mspec-run
to run the actual specs. This allows the mspec infrastructure to be run under a stable Ruby implementation like MRI, while the rubyspec in question is executed by the implementation under development like IronRuby.
The spawning of a separate process means that a the mspec-run
command-line needs to be directly specified to lanuch the rubyspec under Visual Studio. This also requires the RUBY_EXE environment variable to be set as mspec-run
needs it.
SET RUBY_EXE=c:\path\to\Merlin\Main\bin\Debug\ir.exe
If you are running ir.exe with options e.g. -X:Interpret, you also need to set another variable:
SET RUBY_FLAGS="-options"
Test whether mspec-run is going to work directly from the command line.
c:\path\to\Merlin\Main\bin\Debug\ir.exe c:\path\to\Merlin\External\Languages\IronRuby\mspec\mspec\bin\mspec-run -e "correctly resizes the Array" core\array\append
If all is well, you will get a usage message from mspec. If not then you will get a message saying that it could not find a suitable ruby executable. You can now start Visual Studio from the same command line so that the RUBY_EXE environment variable is available to the mspec-run
process that Visual Studio will launch.
devenv
Finally set up VS to run the mspec-run
command as follows:
“Command line arguments” should be set to the following for running the “correctly resizes the Array” example of core\array\append:
-D c:\path\to\Merlin\External\Languages\IronRuby\mspec\mspec\bin\mspec-run -e “correctly resizes the Array” core\array\append
Hitting F5 should now run the single RubySpec example under VS.
It is also possible to pause the execution a running app by modifying its code (with a call to “gets” for example, or by using ir.exe interactively) and then attaching the VS debugger to the spawned rubyspec process. This is sometimes quicker than trying to launch the app from inside Visual Studio
Some experienced IronRuby developers may be available to debug a problem with you. Watching over their shoulder can help a newcomer to the code base learn debugging tips and techniques. To make this a fruitful exercise, please follow the following guidelines:
- Send email to [email protected] asking if any experienced developer is available to help you
- Ensure that you can build and successfully run all of the RubySpec tests.
- Restrict the problems to pure Ruby code which is known to work with MRI. Ensuring a clean working baseline functionality in MRI ensures that the problem truly in IronRuby. Without a known clean MRI baseline, the problem can be in a component other than IronRuby which you are as well-equipped to diagnose as anyone else.
- Set up a clean repro. Spend time ensuring that it is not a configuration issue, and that the problem can be easily reproduced on other machines. Document detailed information about your platform, version of IronRuby, and the steps to repro the problem.
- Do basic debugging by yourself beforehand. This will ensure that you get the most out of the session and can keep up with what’s going on over Live Meeting.
- Set up Live Meeting on your machine, which will allow you to watch the debugging session.
- Add the experienced developer as a friend/buddy in some Chat program so that you can ask questions during the debugging session.