Предположим, кто-то унаследовал сложную кодовую базу (в Visual C++, предположим, 2003 год или, возможно, позже) с большим и сложным графом наследования. Предположим, что это глубоко, и есть много виртуальных функций и, возможно, даже множественное наследование. (Да, что-то вроде кошмара обслуживания). Любая попытка рефакторинга этой иерархии классов во что-то более разумное потребует знания того, какую реализацию каждой виртуальной функции использует каждый класс.
Если мы возьмем произвольный конечный класс L1, который является производным от базового класса B1, который является производным от базового класса B2 и т. д., он явно будет иметь виртуальную таблицу для класса, которая покажет что-то вроде (псевдо-виртуальная таблица):
L1::F1
B3::F2
B1::F3
L1::F4
etc.
... в зависимости от того, какие именно виртуальные функции были переопределены каким классом.
Как можно было увидеть такую vtable в такой форме? Можно было бы восстановить его вручную, прочитав код, но это чревато ошибками и трудоемко. Предположительно также, взлом объекта класса в отладчике может позволить вам проверить vtable в окне Watch через указатель vtable для этого одного класса, но это неудобное решение, особенно если вы хотите также увидеть vtables для L2, Л3, ... ЛН.
Предоставляет ли DbgHelp.dll средства для проверки виртуальных таблиц программно (позволяя выводить данные в любой требуемой форме)? Или есть какой-то другой метод?