Well, that's not helpful in the short term :P
What do you envision by explicitly parametrized i/o object? I really
don't think that's a good idea. It would have to be passed down all
the way to every target function which might want to print some kind of
output. That's a lot of bulk for no visible gain; somewhere down the
road if we supported multiple instantiations of the gdb library, maybe,
but we're so far away from that that this sort of direction seems
futile, until we are at least passing an object cookie everywhere.
As they say, I don't yet know. I think it is pretty clear that the I/O
is just one part of this state problem. Since of thread, frame,
register cache, ... are heavily dependant on state implemented with
globals a guess is an object (or object relationship) that contains that
state. In the mean time we need to ensure that we're not entrenching
the problem (eg by adding another bit of code assuming global state).