Похоже, что для нескольких контейнеров STL GDB не печатает параметры своего шаблона.Например
(gdb) whatis a
type = std::vector<int>
И это вызывает у меня проблемы.
(gdb) whatis std::vector<int>::_M_impl
No type "vector<int>" within class or namespace "std".
(gdb) p *reinterpret_cast<std::vector<int>*>(0x7fffffffd920)
A syntax error in expression, near `*>(0x7fffffffd920)'.
Чтобы получить то, что я хочу, мне нужно вручную добавить не показанные параметры шаблона.
(gdb) whatis std::vector<int, std::allocator<int> >::_M_impl
type = std::_Vector_base<int, std::allocator<int> >::_Vector_impl
(gdb) p *reinterpret_cast<std::vector<int, std::allocator<int> >*>(0x7fffffffd920)
$5 = ......
Тем не менее, это не идеально, так как сложно обобщить программу, добавив эти пропущенные параметры шаблона.Например, учитывая std::map<int, double>
, как я могу узнать, что существуют дополнительные параметры шаблона Compare
и Allocator
, что позволяет получить std::less<Key>
и std::allocator<std::pair<const Key, T> >
Есть ли способ для GDB напечататьвведите без пропуска параметров шаблона?Или есть другой способ решить мою проблему?