Right now a fair amount of code looks like: try ... catch (const gdb_exception &) ... stuff However,this can end up swallowing a QUIT if one is not careful. I think it would be better to catch 'const gdb_exception_error &' in nearly every spot. One question is what to do with this: struct gdb_quit_bad_alloc : public gdb_exception_quit, public std::bad_alloc I don't know why it derives from the _quit form and not _error. Perhaps that's fine, though, since it would just end up returning to the top level.