C++ aarch64 gdb调试libstdc++;找不到stringstream str()方法

C++ aarch64 gdb调试libstdc++;找不到stringstream str()方法,c++,arm64,C++,Arm64,我已经在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

我已经在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

一般来说,GDB在调试时不太擅长调用C++函数。问题是,除非可执行文件中实际存在
stringstream::str()
函数,否则GDB无法调用它,而且该函数通常不存在,这可能是因为您没有在程序中使用它,也可能是因为它已内联到所有调用者中

你可以试试:

p sp->_M_stringbuf.str();
或者,如果这仍然不起作用,那么:

p sp->_M_stringbuf._M_string._M_dataplus._M_p

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

请用一个或类似的问题回答您的问题,这个问题可能会提供答案(-D_GLIBCXX_DEBUG):@stefaanv嗨,我试过了,但在我的环境中无法工作。不知道“它还失败”是什么意思。@stefaanv,
\u GLIBCXX\u DEBUG
与GDB中的调试无关,它向代码中添加额外的断言并更改类型。“在这里一点用都没有。嗨,”乔纳森·韦克利说。我使用gdb运行您的命令,但它总是会收到如下消息:(gdb)p sp->\u M_stringbuf.\u M_string.\u M_dataplus.\u M_p没有名为\u M_stringbuf的成员。(gdb)p sp->_M_stringbuf.str()没有名为_M_stringbuf的成员。我使用gdb7.9.1关于
p sp.\u M_ptr->\u M_stringbuf.\u M_字符串.\u M_数据加成.\u M_p
(gdb)p sp.\u M_ptr->\u M_stringbuf.\u M_数据加成.\u M_p没有名为_M_stringbuf的成员。我不知道发生了什么,这个成员肯定存在。
p sp->_M_stringbuf.str();
p sp->_M_stringbuf._M_string._M_dataplus._M_p