Отладка кода C ++ с использованием: вектора, строки, STL

Я новичок в C ++.Когда я пытаюсь отлаживать код C ++, используя следующие конструкции, такие как строка, вектор определенных собственных типов, STL и т. Д., Отладка становится утомительной. Я использую MS Visual Studio 2010 / Visual C ++ 2010 Express.

например.

- При использовании строки, как показано ниже:

string str;

getline(cin, str);

for(i=0; i<str.size();i++)

В окне просмотра не отображаются значения для str [i]. Он говорит, что перегруженный оператор не найден.Мне нужно вручную свернуть всю строковую переменную str и увидеть элемент char в этом конкретном индексе, что становится громоздким.

- При использовании вектора, как показано ниже, возникла та же проблема. Если я установил переменную v1 [k] в окне просмотра, такая же ошибка.

vector<int> v1(100);


for(int k=0;k<100;k++)
{
    v1.push_back(k);
}

- Пытался использовать простые итераторы STL, такие как it.begin (), it.end () и алгоритмы, такие как sort (), reverse (), мне не удалось выполнить отладку внутри этих функций путем пошагового выполнения или не удалось установить точку разрыва в (я знаю, что они находятся внутри STL или какой-то такой стандартной библиотеки, в них будет гарантировано отсутствие ошибок, но их все равно можно использовать неправильно, передав что-то недопустимое / неправильное)

Исходя из многолетнего использования языка C, на C ++, я нахожу это отсутствие «возможности отладки» или некоторые ограничения в этом болезненным, пока я пытаюсь понять большие куски кода C ++, написанные кем-то другим, на работе.

Мои вопросы -

Каковы эффективные способы отладки рабочего кода, чтобы понять его функциональность, используя такие идиомы, как «шаг», точки останова, точка наблюдения, окна просмотра. Является ли какой-либо конкретный отладчик лучше / хуже, чем другой (например, gdb лучше), или есть какие-то особые приемы / советы, которые помогут отладке.

В целом, как анализировать код C ++, чтобы понять, как он работает?

13
задан goldenmean 24 September 2011 в 17:44
поделиться