+# DEBUGGER
+
+To use use the debugger, launch your program using the nit interpreter `nit` with `-d` option.
+
+It is also possible to execute the program normally until an error is encountered using the `-c` option.
+
+A remote debugger is also available, it can be used with the client-side executable `nitdbg_client`.
+
+On the client side, the debugger works like the previous one, input some commands when debugging a program, except you have to launch the server before trying to debug.
+
+## DEBUGGER FEATURES
+
+When using a debugger, a must-have is the possibility to control execution of your program by stepping over, in and out of a line/snippet of code. The nit debugger allows you to do that.
+
+You can add/remove breakpoints on instructions, so that the execution will stop when the execution reaches the specified line of the specified file.
+
+When an error is encountered, the debugger gives you the chance of inputting commands before exiting.
+
+The debugger also gives the possibility of printing the values of the requested variables.
+
+The modification of variables at runtime is possible too, but only if the variables are of primitive types (until it becomes possible).
+
+Also, you probably won't want to type a long variable name every time you wish to print its value, the debugger has the possibility of setting aliases to replace the awfully long and cryptic name of that variable you try to access by a beautiful alias.
+
+If you want to trace the modifications or uses of a variable of your choice, the trace command will be perfect for you as it will print or break when encountering the variable of your choice.
+
+## DEBUGGER COMMANDS
+
+`n`
+: Proceeds to the next instruction (step-over)
+
+`s`
+: Steps in an instruction
+
+`finish`
+: Steps out of an instruction
+
+`c`
+: Continues the execution until a breakpoint is encountered or until an error/end of program
+
+`b/break line_number`
+: Adds a breakpoint on line *line_number* for the current file
+
+`b/break file line_number`
+: Adds a breakpoint on line *line_number* for the file *file* (Don't forget to add the .nit extension to the command)
+
+`d/delete line_number`
+: Removes a breakpoint on line *line_number* for the current file
+
+`d/delete file line_number`
+: Removes a breakpoint on line *line_number* for the file *file*
+
+`kill`
+: Kills the current program (produces a stack trace)
+
+`variable = value`
+: Sets the value of *variable* to *value* (Only supports primitive types for now : Bool, Char, Int, Float)
+
+`p/print variable_name`
+: Prints the value of the variable *variable_name*
+
+`p/print stack`
+: Prints a stack trace starting with the current frame
+
+`p/print variable_name[index]`
+: Prints the value of the variable contained at the index *index* of variable *variable_name* (*variable_name* must be a subtype of SequenceRead)
+
+`p/print variable_name[index_from..index_to]`
+: Prints the values of all the variables contained from index *index_from* up to *index_to* in the variable *variable_name*
+
+All the print commands also work on any dimension SequenceRead collection.
+
+`variable_name as alias`
+: Sets an alias *alias* for the variable *variable_name*
+
+`trace variable_name [break/print]`
+: Traces the uses of the variable you chose to trace by printing the statement it appears in or by breaking on each use. (The [break/print] part is not mandatory, by default, the print option will be used)
+
+`untrace variable_name`
+: Removes the trace on the variable you chose to trace earlier in the program