Supposons qu'on ait hérité d'une base de code complexe (en Visual C++, supposons 2003 ou peut-être plus tard) avec un graphe d'héritage complexe et volumineux. Supposons que ce soit profond, et qu'il y ait beaucoup de fonctions virtuelles et possiblement même d'héritage multiple. (Oui, un peu d'un cauchemar d'entretien). Toute tentative de refactorisation de cette hiérarchie de classe en quelque chose de plus sûr devra savoir quelle implémentation de chaque fonction virtuelle utilise chaque classe. Si nous prenons une classe feuille arbitraire L1 - qui dérive de la classe de base B1, qui dérive de la classe de base B2, etc. - elle aura clairement un vtable pour la classe qui montrera quelque chose comme (pseudo-vtable):Comment peut-on inspecter une vtable dans Visual C++?
L1::F1
B3::F2
B1::F3
L1::F4
etc.
... en fonction des fonctions virtuelles qui ont été remplacées par quelle classe. Comment peut-on voir un tel vtable dans une forme comme celle-là? Il serait possible de le reconstruire à la main en lisant le code, mais c'est sujet à erreur et laborieux. Probablement aussi, percer dans un objet de la classe dans le débogueur pourrait vous permettre d'inspecter le vtable dans une fenêtre Watch via le pointeur vtable pour cette classe, mais c'est une solution délicate, surtout si vous voulez voir aussi les vtables pour L2, L3, ... LN.
Est-ce que DbgHelp.dll fournit des fonctionnalités permettant d'inspecter les vtables par programme (en autorisant la sortie sous quelque forme que ce soit)? Ou y a-t-il une autre méthode?