如何使用icc编译器检查gdb中std :: vector的内容?

Bre*_*all 15 c++ gdb stl vector icc

我想在gdb中检查std :: vector的内容,但是我没有访问_M_impl,因为我使用的是icc,而不是gcc,我该怎么做?让我们说它是一个std :: vector为了简单起见.

这里有一个非常好的答案,但如果我使用icc,这不起作用,错误消息是"没有名为_M_impl的成员或方法".这里似乎有一个很好的调试工具集,但它也依赖于_M_impl.

Mic*_*Mic 10

不确定这适用于你的矢量,但它对我有用.

#include <string>
#include <vector>

int main() {
    std::vector<std::string> vec;
    vec.push_back("Hello");
    vec.push_back("world");
    vec.push_back("!");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GDB:

(gdb) break source.cpp:8
(gdb) run
(gdb) p vec.begin()
$1 = {
   _M_current = 0x300340
}
(gdb) p $1._M_current->c_str()
$2 = 0x3002fc "Hello"
(gdb) p $1._M_current +1
$3 = (string *) 0x300344
(gdb) p $3->c_str()
$4 = 0x30032c "world"
Run Code Online (Sandbox Code Playgroud)