Я уже установил пакет libstdc ++ — debuginfo в Fedora21-aarch64, но когда я использую gdb для печати stringstream.str (), я всегда получаю это сообщение:
(gdb) ptype sp
type = class std::tr1::shared_ptr<std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> > >
[with _Tp = std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >]
: public std::tr1::__shared_ptr<std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >, (__gnu_cxx::_Lock_policy)2> {
public:
shared_ptr(void);
void shared_ptr<std::basic_stringstream<char> >(std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> > *);
}
(gdb) p sp->str()
Couldn't find method std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::str
исходный код, как показано ниже:
std::tr1::shared_ptr<stringstream> sp ( new stringstream(ios_base::in | ios_base::out | ios_base::binary));
std::tr1::shared_ptr<ostream> osp = sp;
osp->write("hello",6);
cout<<sp->str()<<endl;
и пакет debuginfo, который я установил, как показано ниже:
#debuginfo-install libstdc++
Loaded plugins: auto-update-debuginfo, langpacks
Package gcc-debuginfo-4.9.2-1.fc21.aarch64 already installed and latest version
Package glibc-debuginfo-2.20-5.fc21.aarch64 already installed and latest version
Package gcc-debuginfo-4.9.2-1.fc21.aarch64 already installed and latest version
No debuginfo packages available to install
В общем, GDB не очень хорош при вызове функций C ++ при отладке. Проблема в том, что если stringstream::str()
функция фактически присутствует в исполняемом файле, который GDB не может вызвать, и часто функция отсутствует, либо потому, что вы не использовали ее в своей программе, либо она была встроена во всех вызывающих программах.
Вы можете попробовать:
p sp->_M_stringbuf.str();
или если это все еще не работает тогда:
p sp->_M_stringbuf._M_string._M_dataplus._M_p
Это напечатает char*
член строки внутри stringbuf stringstream.