让 GDB 在调试时完全打印一个大 std::map
Having GDB print a big std::map fully while debugging
我正在研究一种使用大地图的算法。我试图在纸上执行该算法以及 GDB 以查看它出错的地方。
但是随着地图变大,GDB 将其缩写并停止显示我需要的下一个值:
(gdb) p R
= 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 使用 python 脚本的漂亮打印机通过命令 print 进行漂亮的显示,但我不确定在打印我的 std::map 并且我不确定如何修改它。
另外,我真的不知道 STL 容器中的内存是如何处理的(我还没有研究分配器和其他东西),所以我不确定我是否想进入该代码。
您知道打印所有内容的更简单方法吗?或者我必须修改漂亮的打印机吗? (如果可以,您能否提示我修改哪个文件以及用哪些命令注册更改?)。
Do you know any simpler way to print everything ?
(gdb) set print elements 0
我正在研究一种使用大地图的算法。我试图在纸上执行该算法以及 GDB 以查看它出错的地方。 但是随着地图变大,GDB 将其缩写并停止显示我需要的下一个值:
(gdb) p R
= 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 使用 python 脚本的漂亮打印机通过命令 print 进行漂亮的显示,但我不确定在打印我的 std::map 并且我不确定如何修改它。 另外,我真的不知道 STL 容器中的内存是如何处理的(我还没有研究分配器和其他东西),所以我不确定我是否想进入该代码。
您知道打印所有内容的更简单方法吗?或者我必须修改漂亮的打印机吗? (如果可以,您能否提示我修改哪个文件以及用哪些命令注册更改?)。
Do you know any simpler way to print everything ?
(gdb) set print elements 0