相关疑难解决方法(0)

如何在GDB中打印C++向量的元素?

我想检查std::vectorGDB中的内容,我该怎么做?让我们说这是std::vector<int>为了简单起见.

c++ debugging gdb stl vector

204
推荐指数
4
解决办法
11万
查看次数

如何在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调试C++ STL/Boost的最佳实践

使用gdb进行调试,任何使用STL/boost的c ++代码仍然是一场噩梦.任何使用过STL的gdb的人都知道这一点.例如,请参阅此处代码中的一些调试会话的示例运行.

我试图通过收集提示来减轻疼痛.您能否对我在下面收集的提示发表评论(特别是您使用过的提示以及您建议的任何更改) - 我列出的提示是技术性的降序.

  • 有人使用"Stanford GDB STL utils""UCF GDB utils"吗?是否有一些这样的工具用于boost数据结构?上面的util似乎不是递归可用的,例如用于在一个命令内以清晰的方式打印boost :: shared_ptr的向量.
  • 写你的.gdbinit文件.例如,包括C++相关的美化器,列在UCF GDB工具的底部.
  • 使用checked/debug STL/Boost库,例如STLport.
  • 使用日志记录(例如描述这里)

更新:GDB有一个新的C++分支.

c++ boost gdb stl

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

在gdb中使用带有unordered_map的[]运算符可以得到未解析的运算符

我有一个C++代码,我在实例化一个unordered_map,然后使用cout打印它的值.这很好用.但是,当我尝试在gdb中运行它并打印unordered_map的值时,这给了我错误.下面是代码片段:

  std::unordered_map<std::string,int> mymap = {
                      { "Mars", 3000},
                      { "Saturn", 60000},
                      { "Jupiter", 70000 } };

    std::cout<< mymap.at("Mars");
    std::cout<< mymap["Mars"];
Run Code Online (Sandbox Code Playgroud)

上面的两个cout语句都打印了密钥"Mars"的unordered_map值.但是,当我使用gdb然后尝试使用以下语句在关键字"Mars"上打印mymap的值时,我会收到错误.

(gdb) print mymap.at("Mars")
Cannot resolve method std::unordered_map<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, int, 
std::hash<std::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, std::equal_to<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > >, 
std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const, int> > >::at to any overloaded instance

(gdb) print mymap["Mars"]
Cannot resolve function operator[] to any overloaded instance
Run Code Online (Sandbox Code Playgroud)

我使用gdb时没有出错.

我已经尝试在gdb中使用whatis mymap来查看mymap是否存在于当前上下文中并且它表示它存在.此外,我尝试初始化一个int变量并在gdb中打印它并打印它.我不明白unordered_map有什么问题.

我使用下面的语句来生成可执行文件

gsrivas4@TitanX01:~/lcode1$ g++ -std=gnu++11 -O0 -g test1.cpp -o test1.out
Run Code Online (Sandbox Code Playgroud)

c++ gdb unordered-map c++11

9
推荐指数
1
解决办法
2222
查看次数

如何获取gdb中数据成员的值?

您好,我目前正在通过 GDB 在 Linux 机器上调试我的代码库。我目前面临着从类的对象 ptr 获取数据成员的值的问题。要打印对象 ptr 的位置,我们可以使用“p”(打印)或“显示”命令。

例如:我有这样的课程

class abc
{
    string a;
};
Run Code Online (Sandbox Code Playgroud)

因此,在我的代码中,如果我使用类 abc 的指针,那么

abc* objPtr = new abc();
Run Code Online (Sandbox Code Playgroud)

因此,在上面的行中断之后,我将得到 objPtr,现在我想检查数据成员 a (abc::a) 值的值。我怎么能这么做呢?

(gdb) p objPtr
$2 = {px = 0x3ba6430690, pn = {pi_ = 0x3ba6430698}}
Run Code Online (Sandbox Code Playgroud)

此外,是否有不同的方法来检查作为列表/向量的数据成员?

c++ gdb

5
推荐指数
1
解决办法
6658
查看次数

C++,STL,GDB:无法评估函数内联

我希望能够使用GDB从STL容器中获取地址并打印一对.

IE:鉴于以下玩具计划:

#include <map>

int main() 
{
  std::map<int,int> amap;
  amap.insert(std::make_pair(1,2));

}
Run Code Online (Sandbox Code Playgroud)

当我尝试检查地图的单个元素时(例如p amap.begin()),我得到:

"无法评估功能 - 可能是内联的"

删除优化并启用完整调试模式,即(-O0和-g3)不起作用.

为什么会发生这种情况,我该如何解决?

c++ gdb

5
推荐指数
2
解决办法
2950
查看次数

在调试时让 GDB 完全打印一个大的 std::map

我正在研究一种使用大地图的算法。我正在尝试按照算法和 GDB 进行操作,同时在纸上进行操作以查看哪里出错了。但是随着地图变大,GDB 将其缩写并停止显示我需要的下一个值:

(gdb) p R
$1 = std::map with 140 elements = {[0] = "", [1] = "e", [2] = "", [3] = "", [4] = "", [5] = "", [6] = "", [7] = "", [8] = "a", [9] = "a", [10] = "", [11] = "", [12] = "", [13] = "", [14] = "", 
  [15] = "", [16] = "a", [17] = "b", [18] = "", [19] = "", [20] = "", [21] = "", …
Run Code Online (Sandbox Code Playgroud)

c++ gdb stdmap

5
推荐指数
1
解决办法
5046
查看次数

标签 统计

c++ ×7

gdb ×7

stl ×3

debugging ×2

boost ×1

c++11 ×1

linux ×1

stdmap ×1

unordered-map ×1

vector ×1