Debugging

This is an overview of ways of debugging E programs.

Causeway
Causeway is a post-mortem debugger (operating on logs produced by the program) displaying which turns caused which other turns.



Host debugging
E programs can be examined by the host platform (Java, CL, ...)'s debugging mechanisms. This is not especially pleasant in E-on-Java since the E code is interpreted, not compiled.

Printing
Good ol' "printf debugging". Your options here are to either pass around stderr so that you can get to it in the code; or you can send messages to the tracelog with this gimmick:

throw <- ("your trace here")

Virtualization
This is the intended full interactive debugging mechanism for E.

A vat is created whose implementation includes debugging support — most likely, it is implemented using objects living in a normal vat. The "host" vat can therefore run code which examines the "debug-vat" objects and execution state to examine/step/modify them.

The unique property of debugging access is that it allows the vat to be suspended and examined in the middle of a turn.

This hasn't been done yet because it requires what User:Kevin Reid called a "full VM" implementation of E: there must be no immediate callbacks from primitive code to E objects, as that would make interruption impossible.