While helping one of my students create and iterate on a game in C using raylib, I realized there was quite a lot of time spent on experimenting with level design and colors, how the player moves, gravity, etc. and a lot of time was wasted making a change, exiting the game, recompiling, running the game, deciding his change wasn't right, and going through the whole cycle over and over. I could tell it was demotivating, and this process was creating a barrier that prevented him from experimenting to his heart's content.
I started this project to solve this problem by giving a simple gui to a few core features of lldb through the lldb api. Experimenting with changing colors, where blocks in the level go, how tall the player is, gravity is all now just a simple toggle or text field edit. The variables are modifiable while the program is running.
The project is still in its early stages, and so far only targets macOS.
In my case, I went to implement this for Windows, but bit more advanced with inline scripting support. Basically, you insert a snippet anywhere in the code that can call various functions and one of them is `view()` which will show all locals (or a chosen object out of scope) in a Visual Studio window (it's a VS extension [0], website [1]). Calling it again will update the view with the new state. The scripting language underneath is Angelscript and it understands symbols inside your entire project (e.g you could do `view(Namespace::g_variable)` or even call functions from the program etc. The snippet hook is then JIT'ed into the target function by relocating it using info from the PDB. This took me ~1y to implement, and it's still a research phase project.
[0] https://marketplace.visualstudio.com/items?itemName=donadigo...
[1] https://d-0.dev/