Как я могу увидеть значение boost :: any, если я знаю тип с gdb

У меня есть дамп ядра, и я смотрю на дамп ядра с помощью gdb.

Мне было интересно, если есть способ, чтобы иметь возможность проверить значение boost :: any значение в GDB?

В основном у меня был адрес для любого повышения, поэтому я попытался привести его к заполнителю, чтобы посмотреть, смогу ли я проверить значение, но у меня не получилось. Я знаю, что тип надстройки any является беззнаковым длинным, так есть ли способ просмотреть любое значение, зная тип?

(gdb) print ('boost::any::placeholder')(*(('boost::any'*)0x00007f263fa27730).content)
warning: can't find linker symbol for virtual table for `boost::any::placeholder' value
warning:   found `boost::any::holder<bool>::~holder()' instead
$129 = warning: can't find linker symbol for virtual table for `boost::any::placeholder' value
warning:   found `boost::any::holder<bool>::~holder()' instead
warning: can't find linker symbol for virtual table for `boost::any::placeholder' value
warning:   found `boost::any::holder<bool>::~holder()' instead
{
_vptr.placeholder = 0x7f2a9a662560
}

Любая помощь в этом вопросе будет высоко ценится. Спасибо!

7

Решение

boost::any имеет внутренний класс placeholder который содержит содержимое данных. Попробуйте использовать:

(gdb) print (*((boost::any::holder<unsigned long>*)((anyInstance).content))).held
1

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

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