this is not particularly hard to do with the Python interface: you define structures that are known by the process and the Python module + global variables, then you set an internal (silent) breakpoint on a given 'event' function.
In the program you fill the structure with some queries, and in the Python breakpoint callback, you process it as you need.
This is the way multi-thread debugging work (used to at least), shared library detection as well...