【发布时间】:2017-05-05 14:46:34
【问题描述】:
我无法在 gdb 中转储 STL 无序映射容器值。变量类型是 std::unordered_map 变量;
我的 gdb 版本 - 7.7.1 gdb 配置:
configure --host=x86_64-linux-gnu --target=x86_64-linux-gnu
--with-auto-load-dir=$debugdir:$datadir/auto-load
--with-auto-load-safe-path=$debugdir:$datadir/auto-load
--with-expat
--with-gdb-datadir=/usr/local/share/gdb (relocatable)
--with-jit-reader-dir=/usr/local/lib/gdb (relocatable)
--without-libunwind-ia64
--with-lzma
--with-separate-debug-dir=/usr/local/lib/debug (relocatable)
--with-system-gdbinit=/etc/gdb/gdbinit
--with-zlib
--without-babeltrace
g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
打印 STL 容器值 n gdb 的正确方法是什么?
地图容器的gdb输出:
p 变量
$3 = {<std::__allow_copy_cons<true>> = {<No data fields>}, [13/5219]
_M_h = {<std::__detail::_Hashtable_base<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<ch
ar> > const, Metrics_s*>, std::__detail::_Select1st, std::equal_to<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::hash<std::basic_string<char, std::ch
ar_traits<char>, std::allocator<char> > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Hashtable_traits<true, false, true> >> = {<std::__detail::
_Hash_code_base<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, Metric
s_s*>, std::__detail::_Select1st, std::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >
【问题讨论】:
-
正确地向我们展示您的尝试。此输出表明不是
std::map。 -
这表明它是一个 std::unordered_map,虽然
-
我怀疑 OP 的 libstdc++ 太旧了,无法使用漂亮的打印机。我花了一段时间将 gcc/libstdc++-v3/python/libstdcxx/v6/printers.py 的 libstdc++ 存储库一分为二,但是 github 用户界面非常糟糕,我放弃了尝试想出一个版本号来关闭。无论如何,OP 需要提供更多细节。
-
ptype /tm your_variable的输出是什么? -
info pretty-printer的输出是什么?是否正确安装了漂亮的打印机?
标签: c++ stl gdb containers