Осмотр контейнеров STL в отладке Visual Studio

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
29
задан Coding Mash 9 September 2012 в 16:12
поделиться

7 ответов

Для векторов этот поток на форумах MSDN имеет фрагмент кода для установки часов на векторном индексе, который мог бы помочь.

14
ответ дан christopher_f 28 November 2019 в 01:15
поделиться

Если Вы хотите наблюдать больше чем один элемент одновременно, можно добавить запятую и число элементов как так:

(v._Myfirst)[startIndex], count

Однако примечание, что количество должно быть константой, это не может быть результат другого выражения.

19
ответ дан Adam Rosenfield 28 November 2019 в 01:15
поделиться

В VS2005 и VS 2008 Вы видите содержание контейнеров STL. Правила для того, чтобы достигнуть данные находятся в autoexp.dat "c:\Program Files\Microsoft Visual Studio 9\Common7\Packages\Debugger\autoexp.dat".

AutoExp.dat предназначен, чтобы быть настроенным. Однако STL defs находится под разделом по имени [Visualizer]. Если бы можно выяснить язык, используемый в том разделе, большем количестве питания Вам, однако я рекомендовал бы просто оставить ту часть в покое.

Autoexp.dat существовал в VS2003, но не было никакой поддержки контейнеров STL ([Visualizer] не существовал). В VS2003 необходимо вручную переместиться по базовому представлению данных.

Путем изменения autoexp.dat возможно добавить правила для навигации по представлению данных собственных типов, таким образом, их легче отладить. Если Вы делаете это, необходимо только добавить к материалу под [AutoExp]. Будьте осторожны и продолжите заднюю часть этого файла перед изменением его.

11
ответ дан Steve Steiner 28 November 2019 в 01:15
поделиться

Вы могли создать пользовательский visualiser, Проверяют это: http://www.virtualdub.org/blog/pivot/entry.php?id=120

5
ответ дан maxbog 28 November 2019 в 01:15
поделиться

Visual Studio 2008, по крайней мере, для меня, отображает содержание контейнеров STL в стандартном поле контента наведения мыши.

3
ответ дан anon6439 28 November 2019 в 01:15
поделиться

Вы также можете щелкнуть правой кнопкой мыши любое значение в ваших часах и выбрать «добавить часы». Это может быть полезно, если вам нужно взглянуть только на один элемент карты или набора.

Это также приводит к решению, которое christopher_f разместил для векторов - ((v) ._ Myfirst) [index]

1
ответ дан tfinniga 28 November 2019 в 01:15
поделиться

В 2015 году я не смог получить ни одного из этих рабочих
, поэтому я написал немного кода

1: у меня был вектор вектора длинных длинных элементов

std::vector<std::string> vs(M_coins + 1);
for (unsigned long long i = 0; i <= M_coins; i++) {
    std::for_each(memo[i].begin(), memo[i].end(), [i, &vs](long long &n) {
        vs[i].append(std::to_string(n));
        });
}
// now vs is ready for use as vs[0], vs[1].. so on, for your debugger

в основном то, что я сделал, было преобразовано вектор в строку. у меня был вектор вектора, поэтому у меня был строковый вектор для заполнения.

2: если у вас есть только вектор длинных длинных элементов , просто конвертируйте, как показано ниже:

std::vector<std::string> s;
std::for_each(v1.begin(), v1.end(), [&s](long long &n) {
    s.append(std::to_string(n));
    });
// now s is ready for use, for your debugger

надеюсь, что это помогло.

0
ответ дан Manohar Reddy Poreddy 28 November 2019 в 01:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: