The plugin comes with a debugger that can prove extremely useful when debugging protocol logic, or to simply learn about how code is executed.
Starting the debugger is like starting a new engine, but using the debug icon.
Debug '<name>()' in new sandbox session is clicked, you can watch the engine boot up in the
Additionally, you will be prompted to enable or disable compiler optimisations for automatic removal of statements without side effects, and statements which don't affect code execution.
Nothing seemingly happens once it has started, but on closer inspection you'll find the debugger hits a default
internal:1, visible in the
Debugger tab. This internal frame gives you a chance to add breakpoints, or
alternatively you can immediately start using the debugger controls (hitting
Step Over causes it to jump to the first
line of code on the execution path, a useful feature).
Resume Program play button to skip the internal breakpoint. At this point the engine has started.
At this point it's possible to set breakpoints and inspect frame values. Select a protocol instance by clicking on it in
Protocols tab. This navigates us to the protocol's source code. Let's set a breakpoint, displayed as a red dot, at
if-statement in the
pay permission by clicking the grey space next to its line number. Once the
is invoked by clicking the green icon next to it, another
internal:1 frame emerges in the debugger. Once we skip past
Resume Program, our breakpoint is hit. At this point the frame values are visible.
The debugger is now awaiting user input. For example, hit
Step Into (F7) to step into the
amountOwed function, or
Step Over (F8) to skip past this break point.
Dirty (intermediate) engine state
While debugging, protocol states are highlighted with a contrasting colour. These are dirty (intermediate) states that represent states that have not yet been committed - they are the result of the transaction that is in progress and allow you to inspect protocol instances.
Actions cannot be executed when dirty protocol states are pending, as this could cause unexpected behaviour.
Dirty engine state is available for protocol states, commands, and notifications.
It's possible to evaluate expressions while debugging too. For example, you might be interested to see what the result of a partial expression is in order to work out flaws in its logic. You can select an expression, right-click it and select "Evaluate Expression...", or you can invoke expression evaluation directly using the appropriate key combination or click the calculator icon.