GDB调试libstdc++找不到stringstream str()方法

aarch64 gdb debug libstdc++ could not find method stringstream str()

本文关键字:方法 str stringstream 调试 libstdc++ 找不到 GDB      更新时间:2023-10-16

我已经在Fedora21-aarch64中安装了libstdc++-debuginfo包,但是当使用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

将在stringstream的stringbuf中打印字符串的char*成员