Как получить доступ к значениям элементов std::set в gdb?

Я реализовывал набор массивов на C++ и хотел отслеживать значения в нем с помощью gdb, поэтому я создал точку останова после инициализации данных. GDB в Vscode запущен, но все, что я вижу в наборе, — это множество указателей. Я не вижу никаких значений для подражания. Я знаю, что наборы реализованы с использованием красно-черных деревьев, поэтому указатели происходят оттуда, но должен быть способ увидеть значения.

Поэтому я захожу на сайт Online gdb, чтобы проверить, не является ли это делом gdb. Но к счастью смог показать свою стихию

Детали окружения: Версия GDB (Моя локальная): GNU gdb (GDB) 8.3.1 Версия GDB (онлайн gdb): gdb 7.11.1

Версия G++v (мой локальный): 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
$1 = {_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});
}

Итак, как мне получить доступ к своим значениям?

Вы действительно должны указать, какую версию gdb вы используете, и версию, используемую в онлайн-компиляторе.

PaulMcKenzie 18.12.2020 18:52

@PaulMcKenzie Спасибо, я добавил версию

DevUt 18.12.2020 18:59
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
2
418
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наконец я нашел свой ответ после множества поисков в Google. Ответ был довольно-принтеры, я работаю в Windows, поэтому мне пришлось установить MinGW, но у меня не было возможности поддерживать сценарии Python, а также отсутствовала библиотека libstdc++-v3.


  1. Загрузите MinGW, который поддерживает скрипты Python и имеет библиотеку libstdc++-v3.
  2. Удалить старый MinGW
  3. Измените свой PATH в переменных системной среды
  4. Перезапуск
  5. Проверьте с помощью командной строки gdb --version
  6. Теперь в vscode измените свои launch.json и task.json, чтобы отразить изменение местоположения (если оно было изменено).

Другие вопросы по теме