漂亮的打印不适用于C ++ STL列表
pretty print not working for c++ stl list
在以下代码中使用gdb时,看起来漂亮的打印对于stl向量和字符串可以按预期工作,但列表的输出似乎很神秘。
list<int> l;
string a = "Hello";
vector<int> v(2,3);
l.push_back(5);
l.push_back(10);
输出 gdb 漂亮的打印:
(gdb) set print pretty on
(gdb) disp v
1: v = std::vector of length 2, capacity 2 = {3, 3}
(gdb) disp a
2: a = "Hello"
(gdb) disp l
3: l = {
<std::__cxx11::_List_base<int, std::allocator<int> >> = {
_M_impl = {
<std::allocator<std::_List_node<int> >> = {
<__gnu_cxx::new_allocator<std::_List_node<int> >> = {<No data fields>}, <No data fields>},
members of std::__cxx11::_List_base<int, std::allocator<int> >::_List_impl:
_M_node = {
<std::__detail::_List_node_base> = {
_M_next = 0x615c40,
_M_prev = 0x615c60
},
members of std::_List_node<unsigned long>:
_M_data = 2
}
}
}, <No data fields>}
有人可以指出我做错了什么吗?
UPD1:我在x86-64上将以下版本的gcc和gdb与Ubuntu 16.04一起使用
gcc 5.4.1
gdb 7.11.1
我尝试使用 gcc 6.2.0,但同样的问题仍然存在......
UPD2:看起来列表的漂亮打印机已启用(旁边没有[禁用])
(gdb) info pretty-printer
global pretty-printers:
builtin
mpx_bound128
objfile /usr/lib/x86_64-linux-gnu/libstdc++.so.6 pretty-printers:
libstdc++-v6
__gnu_cxx::_Slist_iterator
__gnu_cxx::__7::_Slist_iterator
..
..
std::__7::forward_list
std::__7::list
std::__7::map
很好地打印出数据结构是一些扩展GDB的Python代码的功能(没有双关语)。GDB手册中有一节是关于GDB中漂亮印刷的。
事实证明,对于共享库(可能还有静态链接的库,并不完全清楚),GDB 有办法自动加载它们。在我的 Fedora 25 系统上,GDB 会自动加载/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.22-gdb.py
,这个文件加载了libstdc++
漂亮的打印机。
在线手册有一个相当广泛的部分,关于用Python编写自己的GDB漂亮打印机。
对于您遇到的特定问题,libstdc++
漂亮的打印机必须相当混乱,因为::std::vector
打印机似乎已打开并正常工作,而::std::list
打印机则没有。也许这正是发生的事情。不知何故,::std::list
的那个被取消注册或关闭了。关于GDB如何选择漂亮打印机的部分说,可以单独启用或禁用它们,以处理非工作打印机。
相关文章:
- 如何检查C ++ STL列表是否为回文?
- 清除 C++ 中的指针的 STL 列表
- 在Visual Studio 2013中编译的STL列表代码在Visual Studio 2019中给出了错误.想知道原
- 使用.txt文件填充 STL 列表不起作用
- 为 STL 列表编写选择排序
- 如何从 STL 列表中删除结构记录
- C++如何将 STL 列表传递给函数
- 漂亮的打印不适用于C ++ STL列表
- 在C++中,是否可以引用像C++中的stl列表这样的数据结构部分
- 如何根据STL列表中的元素数量分配内存
- 我怎么知道,如果我在 STL 列表中找到了我搜索的号码
- 打印列表列表C++ STL 列表
- 我们可以在穿越时插入STL列表吗?
- 使用 c++ 的 STL 列表 ..在传递列表指针的数组中
- 使用 C++11 迭代语法时从 STL 列表中删除
- 如何使用静态 stl 列表的迭代器
- 如何更改 stl 列表中项的值
- STL列表,删除所有奇数
- 如何将函数中的stl列表传递为C 中的参数
- 如何将结构添加到STL列表中