如何在 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 库。
- 下载 MinGW 支持 python 脚本并具有 libstdc++-v3 库
- 删除旧的 MinGW
- 在系统环境变量
中更改您的PATH
- 重启
- 使用命令提示符检查
gdb --version
- 现在 vscode 更改您的
launch.json
和 task.json
以反映位置的更改(如果更改)
我正在用 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 库。
- 下载 MinGW 支持 python 脚本并具有 libstdc++-v3 库
- 删除旧的 MinGW
- 在系统环境变量 中更改您的
- 重启
- 使用命令提示符检查
gdb --version
- 现在 vscode 更改您的
launch.json
和task.json
以反映位置的更改(如果更改)
PATH