Angenommen, man hat eine komplexe Codebasis (in Visual C++, vermutlich 2003 oder vielleicht später) mit einem großen und komplexen Vererbungsgraphen geerbt. Nehmen wir an, er ist tief und es gibt viele virtuelle Funktionen und möglicherweise sogar Mehrfachvererbung. (Ja, ein ziemlicher Wartungsalptraum). Jeder Versuch, diese Klassenhierarchie in etwas Vernünftigeres umzuwandeln, muss wissen, welche Implementierung jeder virtuellen Funktion jede Klasse verwendet.
Wenn wir eine beliebige Blattklasse L1 nehmen - die von der Basisklasse B1 abgeleitet ist, die wiederum von der Basisklasse B2 abgeleitet ist, usw. - hat sie eindeutig eine vtable für die Klasse, die so etwas wie eine (Pseudo-Vtable) darstellt:
L1::F1
B3::F2
B1::F3
L1::F4
etc.
...abhängig davon, welche virtuellen Funktionen genau von welcher Klasse überschrieben wurden.
Wie kann man eine solche Tabelle in einer solchen Form sehen? Es wäre möglich, sie von Hand zu rekonstruieren, indem man den Code durchliest, aber das ist fehleranfällig und mühsam. Vermutlich könnte man auch in ein Objekt der Klasse im Debugger einbrechen, um die vtable in einem Watch-Fenster über den vtable-Zeiger für diese eine Klasse zu inspizieren, aber das ist eine umständliche Lösung, besonders wenn man auch die vtables für L2, L3, ... sehen will. LN.
Bietet DbgHelp.dll die Möglichkeit, die vtables programmatisch zu überprüfen (und die Ausgabe in jeder gewünschten Form zu ermöglichen)? Oder gibt es eine andere Methode?