A previous post covered the subject of the initial LLDB and Dylan integration.
While much of this post discusses what we did to improve Dylan integration, the overall techniques are broadly useful for many languages. In fact, if anyone is interested, I am available for consulting on this topic. Just email me.
Catching Up
In the previous post, we talked about changing the base representation from void* to uintptr_t to work around a bug in LLDB. This was, in part, due to our goal to try to have the integration work with the currently shipping version of LLDB.
Unfortunately, this work won't be completed and merged. In separate developments, it has emerged that it can be unsafe to treat a pointer as an integer when working with a garbage collector. The details of this are quite interesting, so out of an abundance of caution, we will not be going down this route.
Expanding Objects
We are able to use the "pointer depth" parameter to commands like expression and frame variable to show the "expanded" form of objects:
(lldb) frame variable -P 1 T15 (dylan_value) T15 = 0x017e8000 {<buffer>} { [buffer-next] = 0x00000001 {<integer>: 0} [buffer-end] = 0x00000001 {<integer>: 0} [buffer-position] = 0x00000001 {<integer>: 0 ...
There are comments.