RemedyBG's debug-protocol for requesting and receiving data has now been fleshed out. The way it works is pretty straight-forward and was inspired by Casey's discussion of debugger architecture from a while back.
To open a new inspector, the user makes a single call into RemedyBG. This call takes an inspector expression along with a user provided callback that gets triggered in a few different cases.
First, we'll talk a little bit about the inspector expression strings themselves. Briefly, an expression is structured as
{expression:field_1;field_2;...;field_n}
where 'expression' can be any of the pseudo-expressions (%callstack, %modules, %threads, %watches, %breakpoints, %registers, or %processes), a C-style array, or a linked-list in which the expression is augmented with the name of the field to allow traversal as
{expression(next_field);field_1;field_2;...;field_n}
The pseudo-expressions act as if they were C-structs with their own fields. For example, %call