Определить конкретный тип объекта за auto_ptr из дампа ядра

у меня есть auto_ptr<IFoo>, где IFoo интерфейс только с чисто виртуальными методами

Теперь у меня также есть файл core после ошибки сегментации, где я действительно хотел бы знать, что за конкретный подкласс скрывался за этим auto_ptr. Как dynamic_cast работает в проекте, я думаю, что RTTI должен быть как-то доступен, но я не знаю, как я мог бы получить доступ к этой информации через gdb?

Вывод, который я получаю, выглядит следующим образом:

(gdb) print this->obj._M_ptr
$22 = (class martin::IFoo *) 0x7418

Что бы я действительно хотел знать, если указатель принадлежит IBarили IBaz,

Спасибо за любую помощь!

4

Решение

Что бы я действительно хотел знать, если указатель принадлежит IBaror или IBaz

GDB должен быть в состоянии сказать вам это. использование (gdb) set print object on, Документация Вот.

При отображении указателя на объект указывайте фактическое (производное)
тип объекта, а не объявленный тип, используя виртуальный
таблица функций. Обратите внимание, что требуется таблица виртуальных функций — это
функция может работать только для объектов, имеющих тип времени выполнения
удостоверение личности; один виртуальный метод в объявленном типе объекта
достаточно.

Обновить:

он выводит только интерфейс IFoo *

Это, вероятно, означает, что указатель действительно указывает на IFoo (например, объект, который имел тип IBar или же IBaz уже был разрушен).

Будет работать с dynamic_cast подразумевать

Да, dynamic_cast не может работать без RTTI; если вы используете dynamic_cast, print object on должен просто работать.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]