我正在研究一种使用大 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 吗? (如果是这样,你能给我一个提示,告诉我要修改哪个文件以及用哪些命令来注册更改吗?)。
最佳答案
关于c++ - 让 GDB 在调试时完全打印一个大的 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47743215/