|Version 6 (modified by guest, 6 years ago)|
Documentation for the new GHCi debugger
These notes detail the breakpoint debugger which is being incorportated into GHCi. Note that there was/is a previous prototype debugger, and we share some of its code (specifically the term printer) (see: GhciDebugger).
Setting break points
You can set a breakpoint in three ways:
- By line number.
- By line and column number.
- By function name (not implemented yet).
In each case you can specify which module to set the breakpoint in, however, if the module name is omitted then the debugger will choose a default module (XXX give a better explanation of what module is chosen by default).
The syntax for setting breakpoints by line number is:
:break MyModuleName 12
This will activate the breakpoint which corresponds to the leftmost outermost expression which begins and ends on line 12 in the module called 'MyModuleName?'.
Continuing execution after a breakpoint
Known problems in the debugger
Wishlist of features (please add your's here)
- Replace Loc with a proper source span type
- Look at slow behaviour of :print command on long list of chars (I've asked Pepe about this).
- Investigate whether the compiler is eta contracting this def: "bar xs = print xs", this could be a problem if we want to print out "xs".
- Implement show command (to list currently set breakpoints)
- Fix the ghci help command
- Implement the delete command (to delete one or more breakpoints)
- Save/restore the link environment at break points. At a breakpoint we modify both the hsc_env of the current Session, and
also the persistent linker state. Both of these are held under IORefs, so we have to be careful about what we do here. The "obvious" option is to save both of these states on the resume stack when we enter a break point and then restore them when we continue execution. I have to check with Simon if there are any difficult issues that need to be resolved here, like gracefully handling exceptions etc.
- Remove dependency on -fhpc flag, put debugging on by default and have a flag to turn it off
- Allow break points to be set by function name. Some questions: what about local functions? What about functions inside type class instances, and default methods of classes?
- Support Unicode in data constructor names inside info tables
- Fix the slow search of the ticktree for larger modules, perhaps by keeping the ticktree in the module info, rather than re-generating it each time.
- Use a primop for inspecting the STACK_AP, rather than a foreign C call