相关疑难解决方法(0)

使用gdb检查标准容器(std :: map)内容

假设有这样的事情:

#include <map>
int main(){
    std::map<int,int> m;
    m[1] = 2;
    m[2] = 4;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够从gdb检查运行该程序的地图的内容.
如果我尝试使用下标运算符,我得到:

(gdb) p m[1]
Attempt to take address of value not located in memory.
Run Code Online (Sandbox Code Playgroud)

使用find方法不会产生更好的结果:

(gdb) p m.find(1)
Cannot evaluate function -- may be inlined
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

c++ gdb stl map

83
推荐指数
5
解决办法
8万
查看次数

如何在GDB中打印STL容器?

我按照GDB维基上的说明安装了用于查看STL容器的python pretty-printers.我~/.gdbinit现在看起来像这样:

python 
import sys 
sys.path.insert(0, '/opt/gdb_prettyprint/python') 
from libstdcxx.v6.printers import register_libstdcxx_printers 
register_libstdcxx_printers (None) 
end 
Run Code Online (Sandbox Code Playgroud)

但是,当我运行GDB并尝试打印STL类型时,我得到以下内容:

print myString
Python Exception <class 'gdb.error'> No type named std::basic_string<char>::_Rep.: 
$3 = 
Run Code Online (Sandbox Code Playgroud)

任何人都可以对此有所了解吗?我正在运行Ubuntu 12.04,它带有GDB 7.4.

c++ linux debugging gdb stl

49
推荐指数
6
解决办法
3万
查看次数

gdb无法找到operator []

double var1, var2;
std::vector<double *> x;

var1 = 1;
var2 = 2;

x.push_back(&var1);
x.push_back(&var2);
Run Code Online (Sandbox Code Playgroud)

当我在gdb中调试此代码并尝试print x [0]或*x [0]时,我得到:找不到operator [].现在如果我在push_back之后包含这一行:

x[0] = &var1;
Run Code Online (Sandbox Code Playgroud)

我可以访问gdb中的任何特定元素.其他成员也会发生同样的事情,例如front(),at()等.我的理解是编译器/链接器只包含源代码中存在的成员函数,而那些是我可以在gdb中使用的成员函数.有没有办法包含std :: vector的每个成员函数,所以我可以在gdb中访问它们?

c++ gdb vector

20
推荐指数
2
解决办法
9153
查看次数

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

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

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

c++ gdb stl vector icc

15
推荐指数
1
解决办法
2万
查看次数

如何使用GDB 7.x查看STL容器的内容

我一直在使用宏解决方案,因为它是概述这里.但是,提到了如何在没有宏的情况下查看它们.我指的是GDB版本7及更高版本.

有人会说明怎么样?

谢谢

c++ gdb stl

13
推荐指数
1
解决办法
1万
查看次数

gdb:你怎么得到std :: vector <float>的最大值?

我正在调试一些C++代码,我有一个非常大std::vector<floating_point_type>(floatdouble).在C++代码中,当我想要std::vector我可以使用的最大值时std::max_element().所以在gdb我尝试使用相同的代码,但我收到了一个错误.

gdb我使用call std::max_element(x)并得到一个错误消息No symbol "max_element" in namespace "std".

有没有办法获得矢量的最大值gdb

我还要感谢解释为什么我的使用尝试std::max_element不起作用(可能std::max_element只是一个标题或内联函数).

c++ gdb vector

6
推荐指数
2
解决办法
378
查看次数

访问 GDB 中的向量项

例如,我在模板类中有这样的结构:

struct Foo{
    int data;
    vector<Foo*> children;
}
Run Code Online (Sandbox Code Playgroud)

要打印出数据值,我可以简单地执行以下操作:(设为bar指向 a 的指针Foo

print bar->data
Run Code Online (Sandbox Code Playgroud)

这很好用。不过我还想关注children另一个Foo。我试过:

print bar->children[0]->data
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我应该如何访问向量中的项目并在中使用它print

c++ gdb vector stdvector

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×7

gdb ×7

stl ×4

vector ×4

debugging ×1

icc ×1

linux ×1

map ×1

stdvector ×1