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

标签 c++ gdb stdmap

我正在研究一种使用大 map 的算法。我试图在纸上执行该算法以及 GDB 以查看它出错的地方。 但是随着 map 变大,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] = "", [22] = "b", [23] = "", [24] = "", [25] = "a", [26] = "", [27] = "", [28] = "", [29] = "", [30] = "", [31] = "b", 
  [32] = "", [33] = "a", [34] = "", [35] = "", [36] = "", [37] = "", [38] = "", [39] = "", [40] = "(b|a)", [41] = "e", [42] = "", [43] = "", [44] = "", [45] = "", [46] = "", [47] = "", [48] = "", 
  [49] = "", [50] = "", [51] = "a*.a", [52] = "", [53] = "", [54] = "", [55] = "", [56] = "", [57] = "", [58] = "", [59] = "", [60] = "", [61] = "", [62] = "", [63] = "", [64] = "", [65] = "a", 
  [66] = "b", [67] = "", [68] = "", [69] = "", [70] = "", [71] = "", [72] = "b.a*.a", [73] = "", [74] = "a", [75] = "", [76] = "", [77] = "", [78] = "", [79] = "", [80] = "b", [81] = "", [82] = "a", 
  [83] = "", [84] = "", [85] = "", [86] = "", [87] = "", [88] = "", [89] = "(b|a)", [90] = "e", [91] = "", [92] = "", [93] = "", [94] = "", [95] = "", [96] = "", [97] = "", [98] = "", [99] = ""...}

我尝试使用 p R[100] 访问元素,但 GDB 不理解这种语法:

(gdb) p R[100]
Attempt to take address of value not located in memory.

我听说 GDB 使用 pretty-printers,它们是 python 脚本,通过命令 print 进行漂亮的显示,但我不确定在打印 std::map 时到底是哪个 pretty-print ,我是不知道如何修改它。 另外,我真的不知道 STL 容器中的内存是如何处理的(我还没有研究分配器之类的东西),所以我不确定我是否想深入了解该代码。

您知道打印所有内容的更简单方法吗?或者我必须修改 pretty-print 吗? (如果是这样,你能给我一个提示,告诉我要修改哪个文件以及用哪些命令来注册更改吗?)。

最佳答案

Do you know any simpler way to print everything ?

(gdb) set print elements 0

Documentation .

关于c++ - 让 GDB 在调试时完全打印一个大的 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47743215/

相关文章:

c++ - 在具有严格内存限制的 O(n^3) 中求解 5SUM

c++ - LD_PRELOAD 未按预期工作

python - 内存转储格式为 gdb 中的 xxd

c - 如何在GDB模式下传递输入数据进行编程 C. 已传递参数并运行程序

c++ - 为什么我需要绑定(bind)姿势矩阵的逆来计算动画?

c++ - 在序列化期间删除不必要的内存分配

python - Gdb python 脚本: No symbol in current contex - even if symbol is there

c++ - O(log n) 索引更新和搜索

c++ - 如何将具有常量字段的对象添加到 std::map?

c++ - 在容器中删除 std::map 元素的有效方法