Wie kann man eine Vtable in Visual C ++ untersuchen?

ngenommen, man hat eine komplexe Codebasis mit einem großen und komplexen Vererbungsdiagramm geerbt (in Visual C ++ wird 2003 oder später angenommen). Angenommen, es ist tief und es gibt viele virtuelle Funktionen und möglicherweise sogar Mehrfachvererbung. (Ja, ein bisschen wie ein Wartungsalptraum). Jeder Versuch, diese Klassenhierarchie in etwas Saniereres umzugestalten, 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 von der Basisklasse B2 abgeleitet ist, usw. - wird es eindeutig eine vtable für die Klasse geben, die so etwas wie (pseudo-vtable) zeigt:

L1::F1
B3::F2
B1::F3
L1::F4
etc.

... abhängig davon, welche virtuellen Funktionen von welcher Klasse überschrieben wurden.

Wie kann man eine solche vtable in einer ähnlichen Form sehen? Es wäre möglich, es von Hand durch Lesen des Codes zu rekonstruieren, aber das ist fehleranfällig und mühsam. Vermutlich können Sie durch das Aufbrechen in ein Objekt der Klasse im Debugger die vtable in einem Überwachungsfenster über den vtable-Zeiger für diese eine Klasse untersuchen. Dies ist jedoch eine umständliche Lösung, insbesondere, wenn Sie auch die vtables für L2 anzeigen möchten. L3, ... LN.

Bietet DbgHelp.dll die Möglichkeit, die vtables programmgesteuert zu überprüfen (um die Ausgabe in jeder gewünschten Form zu ermöglichen)? Oder gibt es eine andere Methode?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage