如何在 gdb 中访问 std::set 的元素值?

How to access values of elements of std::set in gdb?

我正在用 C++ 实现一组数组,并想使用 gdb 跟踪其中的值,所以我在数据初始化后创建了一个断点。 Vscode 中的 gdb 已启动,但我看到的只有无数指针。我看不到可遵循的价值观。我知道集合是使用红黑树实现的,因此指针源自那里,但应该有一种方法可以查看值。

所以我跳到 Online gdb 来检查这是否是 gdb 的东西。但幸运的是它能够显示它的元素

环境详细信息: Gdb 版本(我的本地):GNU gdb (GDB) 8.3.1 Gdb版本(在线gdb):gdb 7.11.1

G++ versionv(我的本地):g++ (GCC) 9.2.0 G++ 版本(在线 gdb):g++ (GCC) 5.4.1

那我做错了什么?还是 vscode 无法显示值?

编辑 所以我尝试从命令行使用 gdb

15          for (int i=0; i<m; i++){
(gdb) print s
 = {_M_t = {
    _M_impl = {<std::allocator<std::_Rb_tree_node<std::array<int, 2> > >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::array<int, 2> > >> = {<No data fields>}, <No data fields>}, <std::_Rb_tree_key_compare<std::less<std::array<int, 2> > >> = {
        _M_key_compare = {<std::binary_function<std::array<int, 2>, std::array<int, 2>, bool>> = {<No data fields>}, <No data fields>}}, <std::_Rb_tree_header> = {_M_header = {_M_color = std::_S_red, _M_parent = 0x181610,
          _M_left = 0x181a40, _M_right = 0x181b60}, _M_node_count = 5}, <No data fields>}}}
(gdb)

对于任何想知道我如何生成我的集合的人

int n,m; cin>> n>>m;
set <array<int,2>> s;
for(int i=0; i<n;i++){
    int a; cin>>a;
    s.insert({a,i});
}

那么如何访问我的值?

经过 google 次搜索,我终于找到了答案。答案是漂亮的打印机,我在 windows 所以我不得不安装 MinGW 但我的没有能力支持 python 脚本并且也缺少 libstdc++-v3 库。


  1. 下载 MinGW 支持 python 脚本并具有 libstdc++-v3 库
  2. 删除旧的 MinGW
  3. 在系统环境变量
  4. 中更改您的PATH
  5. 重启
  6. 使用命令提示符检查gdb --version
  7. 现在 vscode 更改您的 launch.jsontask.json 以反映位置的更改(如果更改)