如何在gdb中转储STL容器数据?

use*_*571 8 c++ containers gdb stl

我无法在gdb中转储STL无序映射容器值.变量类型是std :: unordered_map <> var;

我的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
Run Code Online (Sandbox Code Playgroud)

g ++(Ubuntu 4.8.4-2ubuntu1~14.04.3)4.8.4

什么是打印STL容器值n gdb的正确方法?

地图容器的gdb输出:

p var

$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> > >
Run Code Online (Sandbox Code Playgroud)

Ame*_*aVS 5

试试看这个:https : //gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python/

并将这些行添加到您的: ~/.gdbinit

python
import sys
sys.path.insert(0, '<Path to SVN Checkout Directory>')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end
Run Code Online (Sandbox Code Playgroud)

如果它不起作用,您可以从更接近您正在使用的 GDB 版本的 SVN 中检出旧版本。

注意:假设您的 GDB 启用了 python 后端。

更新:如果您使用 Ubuntu 软件包中的 gdb 软件包,您可以尝试安装以下软件包以添加对“STL 漂亮打印”的支持libstdc++6-4.8-dbg
有了这个更新,gdb 应该自动支持 STL 容器的漂亮打印。


pe3*_*e3k 4

你的gdb --configuration输出缺少--with-python子句,所以我假设你的 gdb 确实不能使用 python 扩展。根据这个 SO 答案gdb 漂亮打印不起作用,漂亮打印似乎有必要工作。

我的 docker 中的 ubuntu 14.04 具有漂亮的打印功能,并且 gdb 是使用 --with-python 配置的。看起来,你的 gdb 安装是经过某种定制的。您可以使用正确的选项从源重新编译 gdb,或者尝试从分发包中清理重新安装 gdb。