LINUX.ORG.RU

Ответ на: google же от x4DA

Ну и че? он мне выдает что-то типа No symbol «vtable» in current context. И че с этим делать?

mskmsk1985
() автор топика

Делается это так:

1) после создания объекта с виртуальными функциями надо его просмотреть:

(gdb)print *object 
в выводе будет что-то типа:
..._vptr$ClassName = 0xAddress 
этот самый 0xAddress есть указатель на «начало» таблицы с RTTI.

2) считаем количество виртуальных функций в object (пусть оно равно n) и просматриваем таблицу

x/nxg 0xAddress
в ответ получите перечисление адресов виртуальных функций по порядку (Отмечу что в одном из опробованных примеров виртуальный деструктор появился двя раза!)

3) проверяем чему соответствуют адреса:

list *0xAddress_from_table
если это действительно адресс виртуальной функции отладчик перейдет на её определение.

ЗЫ: Рядом с таблицей как правило пишется информация RTTI о type_info причем она точно (? у меня всегда) есть перед первой виртуальной функцией и иногда есть поле последней.

ЗЫЫ: Нахрена оно все? Да бывают случаи когда при условной компиляции (естесно некоректно сделанной) в одном месте виртуальная функция в объявлении класса есть а в определении (в другой единице трансляции) её уже нет и не компилятор не линковщик эту ошибку не отлавливает, а прога сыплется по сегфолту и репу чесать моно оочень долго.

mskmsk1985
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.