Доступ к содержимому векторов в режиме отладки

Рейтинг: 0Ответов: 1Опубликовано: 27.10.2014

Использую g++ версии 4.8.1, среду разработки NetBeans 7.2. В программе объявляю вектор A_vec чисел типа double. Заполняю вектор элементами. Ставлю точку останова в программе после заполнения вектора и запускаю в режиме отладки. На вкладке "Анализ выражений" выражение "A_vec.size()" выдает 10, то есть элементы в векторе есть. Однако при попытке вычислить "A_vec[0]" выводится непонятное "A_vec[0] = @0x1942218", а если вычислить "(double)A_vec[0]", и вовсе возникает окно с ошибкой "Cannot access memory at address 0x1942218". В чем может быть дело? В векторе точно есть элементы, почему отладчик их не видит?

Обновление

Ошибка возникает даже в минимальных демках. Пример:

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char** argv) {
    vector<double> a(3,1);
    cout << a.at(0);
    return 0;
}

Обновление

Проблема наблюдается только при отладке в Windows (использую отладчик gdb, входящий в состав пакета MinGW). На ОС семейства Linux все ОК.

Ответы

▲ 3Принят

Обычный gdb (проверял в Linux) прекрасно все видит:

(gdb) p a[0]
$1 = (double &) @0x6040d0: 0
(gdb) p a[8]
$2 = (double &) @0x604110: 8
(gdb) p a.size()
$3 = 10
(gdb) p a
$4 = {<std::_Vector_base<double, std::allocator<double> >> = {
      _M_impl = {<std::allocator<double>> = {<__gnu_cxx::new_allocator<double>> = {<No data fields>}, <No data fields>}, _M_start = 0x6040d0, 
      _M_finish = 0x604120, _M_end_of_storage = 0x604150}}, <No data fields>}

Может сами значения где-то на экране среды разработки теряются?

Обновление

Попробовал. Естественно, все работает

avp@avp-xub11:hashcode$ gdb ./a.out 
GNU gdb (Ubuntu 7.7-0ubuntu3.1) 7.7
  ....
(gdb) br 18
Breakpoint 1 at 0x8048925: file c.cpp, line 18.
(gdb) r
Starting program: /home/avp/hashcode/a.out

Breakpoint 1, main () at c.cpp:18
18      for (int i = 0; i < 10; i++)
(gdb) p (double)a[0]
$1 = 0
(gdb)

а с чего бы ему не работать?

(я работаю просто из командной строки без всяких IDE).

Обновление 2

А почему тогда размер показывает?

Более того. Он же пишет:

 Мне удалось получить доступ к элементу с помощью вот такого выражения: "(double)a._M_impl._M_start".

значит данные есть.

Я просто никогда не использовал NetBeans, поэтому понятия не имею, что и где там смотреть (включился, просто чтобы кто-то подхватил и, может быть, помог автору).