MI Development The GDB/MI interface as it is today has the following important problems. Variable objects and RTTI For C++, variable objects are not able to look at the real type of the object. Only the static type is shown. We should be able to implement display of real type, using Apple's branch as reference. CLI commands bypass MI When a CLI command is issued, we don't see "^running". As result, frontend can easily think that gdb is waiting for commands while inferior is running. Variable objects and scopes Variable objects don't care much about C++ scopes. For example, it's not possible to create a variable object for a given expression in particular scope, which makes it impossible to accurately implement variable tooltips. Also, it's not possible to list all local variables in the entire function, which requires extraordinary effort to display all local variables as the enter scope and leave scope. Change notification style Generally, all commands that a frontend might want to issue at each step -- list of breakpoints, list of threads, list frames, list of local variables -- should have a notification to match, which is emitted whenever gdb thinks the result of those command can possibly change. Wit this, the frontend won't have to automatically issue any commands after step -- if anything changes, gdb will report that itself. Static fields The way -var-list-children displays always displays static field is a bit annoying, it can also result in nice never ending trees, like in https://bugs.eclipse.org/bugs/show_bug.cgi?id=136627 Need to make it customizable. Custom display For many kinds of objects there's some more reasonable representation than pure varobj tree. For example -- for QString we need the real string. For vector we need content of the vector to be the children.  This requires some scripting level, that can customize creation of children of variable object and display as string.  In order for -var-update to work, that customization level should actually be able to construct arbitrary value and use that value for a variable object. For -var-update together with vector, we should be able to check if the vector size/storage has changed. I'm not sure how we'd create new children if a vector is resized.