Suppose one had inherited a complex codebase (in Visual C++, assume 2003 or perhaps later) with a large and complex inheritance graph. Suppose it's deep, and there's lots of virtual functions and possibly even multiple inheritance as well. (Yes, a bit of a maintenance nightmare). Any attempt to refactor this class hierarchy into something saner will need to know which implementation of each virtual function each class uses.
If we take an arbitrary leaf class L1 - which derives from base class B1, which derives from base class B2, etc. - it will clearly have a vtable for the class which will show something like (pseudo-vtable):
L1::F1
B3::F2
B1::F3
L1::F4
etc.
...depending on exactly which virtual functions have been overridden by which class.
How could one see such a vtable in a form much like that? It would be possible to reconstruct it by hand by reading through the code, but that's error-prone and laborious. Presumably also, breaking into an object of the class in the debugger could allow you to inspect the vtable in a Watch window via the vtable pointer for that one class, but that's an awkward solution particularly if you want to also see the vtables for L2, L3, ... LN.
Does DbgHelp.dll provide facilities to inspect the vtables programmatically (allowing output in whatever form is required)? Or is there some other method?