Extending the debugger through moldable exceptions
In Glamorous Toolkit exceptions are moldable. They can define custom debugging views and actions shown in a domain-specific debugger tailored to that exception.
To achieve this, exception can define debugging views simply by defining normal inspector views and annotating them with the pragma gtExceptionView
. When an exception defines one or more such views, a domain-specific debugger is enabled that directly shows those views.
For more details on how to configure the domain-specific debugger attached to an exception see Configuring moldable exceptions.
The exception GtExampleExceptionWithDebuggingView
defines a view in that method #selector
that shows a comparison betwen an expected and an obtained value.
The debugging view is defined as a normal inspector view attached to the exception object. This means that we can see the view also when inspecting the exception object.

Whenever the exception is not handled, a new domain-specific debugger is enabled that shows the debugging view defined by this exception.

The normal debugger is also available. Above, there is a tab labeled "GT Debugger"
that switches to the default debugger.
We are not limited to a single debugging view within an exception. Exceptions can define multiple debugging views. The exception GtExampleComparisonExceptionWithDebuggingViews
defines two debugging views, #selector
and #selector
.
Both these views are then shown when we encounter this exception, by using a tab widget.
