## Byebug as a C-extension¶ ↑

Byebug is a gem developed as a C-extension. The debugger internal's functionality is implemented in C (the interaction with the TracePoint API). The rest of the gem is implemented in Ruby. Normally you won't need to touch the C-extension, but it will obviously depended on the bug you're trying to fix or the feature you are willing to add. You can learn more about C-extensions here or here.

## Prerequisites¶ ↑

`Byebug` depends on the TracePoint API provided by `ruby-core`. This is a young API and a lot of bugs have been recently corrected. Without this fixes, `byebug` will fail to work properly, so make sure you have always the last patch level releases of Ruby installed.

Also, if you are developing on linux, make sure you have the GNU indent utility installed for automatic check of code style in C files. If you're developing in MacOSX, just make sure you keep a consistent style if you edit the C-extension files. Travis CI will do the automatic check anyways.

## Getting started¶ ↑

Once you have a local clone of `byebug`, you can start digging in the source code. First run `bundle install` to get development & test dependencies installed. Also make sure you compile the C-extension using `bundle exec rake compile`, otherwise you won't be able to use your local clone. You can also run the test suite as the default rake task (`bundle exec rake`). This task is composed of 4 subtasks:

    bundle exec rake compile # compiles the C-extension
    bundle exec rake test # Run the test suite
    bundle exec rake rubocop # Run RuboCop's checks on the Ruby files
    bundle exec rake ccop # Run `indent`'s checks on the C files

After having done this, just read the code and improve it! Your contribution is appreciated a lot!