Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用icc编译器检查gdb中std::vector的内容?_C++_Stl_Vector_Gdb_Icc - Fatal编程技术网

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

C++ 如何使用icc编译器检查gdb中std::vector的内容?,c++,stl,vector,gdb,icc,C++,Stl,Vector,Gdb,Icc,我想检查gdb中std::vector的内容,但我没有访问_M_impl的权限,因为我使用的是icc,而不是gcc,我该怎么做?为了简单起见,假设它是一个std::vector 有一个非常好的答案,但如果我使用icc,这不起作用,错误消息是“没有名为_M_impl的成员或方法”。似乎有一个不错的调试工具集,但它也依赖于std::vector模板。如果获取前面元素的地址(例如,&v[0]),则可以通过C样式数组访问向量中的任何其他元素。这并不要求调试器可以使用STL的源代码 在搞乱了一些之后,似

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


有一个非常好的答案,但如果我使用icc,这不起作用,错误消息是“没有名为_M_impl的成员或方法”。似乎有一个不错的调试工具集,但它也依赖于
std::vector
模板。如果获取前面元素的地址(例如,
&v[0]
),则可以通过C样式数组访问向量中的任何其他元素。这并不要求调试器可以使用STL的源代码



在搞乱了一些之后,似乎
v.front()
v.begin()
很可能是内联的,GDB没有找到它们。我会继续查找,但就我个人而言,我只需将行
int*I=&v[0]
添加到源文件中,然后在调试时在
I
上使用GDB命令。请注意,编译器可以自由删除该死代码。您可能需要输出
i
的值来避免这种情况,或者干脆不启动优化。

不确定这是否适用于您的向量,但它对我有效

#include <string>
#include <vector>

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

通常,当我在调试器中处理容器类时,我会构建对元素的引用,作为局部变量,因此在调试器中很容易看到,而不会在容器实现中弄乱

这里有一个人为的例子

vector<WeirdStructure>  myWeird;

/* push back a lot of stuff into the vector */ 

size_t z;
for (z = 0; z < myWeird.size(); z++)
{
    WeirdStructure& weird = myWeird[z];

    /* at this point weird is directly observable by the debugger */ 

    /* your code to manipulate weird goes here */  
}
向量机;
/*将大量内容推回向量*/
尺寸_t z;
对于(z=0;z

这就是我使用的习惯用法。

如何访问第一个元素?myvector[0]在gdb中不工作..?谢谢您的帮助。gdb不允许我在打印行调用myvector.front()?-->找不到方法std::vector::front抱歉,上次我试图在gdb中调用成员函数时,我必须传入名称mangled name(即二进制文件中实际出现的符号)。我相信他们现在已经修好了&v[0]比&(v.front())更常见,因此我已将答案更改为使用该选项。再次感谢您的帮助。这是我尝试的第一件事,[]运算符也不起作用。>print nactive_serverByTB[0]您试图传递给运算符[]的参数之一无法转换为函数所需的参数。谢谢。icc编译版(v9.1)似乎不允许这样做。奇怪的是,7年后,gdb仍然不能以合理的方式展示集装箱,这让人感到非常羞愧。甚至没有字符串…没有icc限制:
vector<WeirdStructure>  myWeird;

/* push back a lot of stuff into the vector */ 

size_t z;
for (z = 0; z < myWeird.size(); z++)
{
    WeirdStructure& weird = myWeird[z];

    /* at this point weird is directly observable by the debugger */ 

    /* your code to manipulate weird goes here */  
}