Я использую визуальную студию уже год, и до сих пор кое-что не понимаю. Как мне эффективно использовать в нем функцию отладчика? Специально для C ++

Вот код, который я хочу отладить:

#include <iostream>
#include <vector>


using namespace std;

//sort methode
void swap(long long int* a, long long int* b) { 
    long long int t = *a; 
    *a = *b; 
    *b = t; 
} 
int partition (vector<long long int> vector, long long int left, long long int right) { 
    long long int pivot = vector[right];  
    int i = (left - 1);   
   
    for (int j = left; j <= right- 1; j++) { 
        if (vector[j] <= pivot) 
        { 
            i++;  
            swap(&vector[i], &vector[j]); 
        } 
    } 
    swap(&vector[i + 1], &vector[right]); 
    return (i + 1); 
}  
void quickSort(vector<long long int> vector, long long int left, long long int right) { 
    if (left < right) { 
        long long int pivot = partition(vector, left, right); 
 
        quickSort(vector, left, pivot - 1); 
        quickSort(vector, pivot + 1, right); 
    } 
} 
//end sort

//mainMethod
void maxoddValue(vector<long long> nVector, vector<long long> kVector, int n){
    //declare the 4 necessary vectors
    vector <long long> largestEven;
    vector <long long> largestOdd;
    vector <long long> smallestEven;
    vector <long long> smallestOdd;

    long long cur_val = - 1;
    //largestEven
    for (int i = n - 1; i >= 1; i--){
        if (nVector[i] % 2 == 0){ //if value is even
            if(nVector[i] < cur_val){ // and the value is smaller than the 
                smallestEven.push_back(cur_val);
            } else { //if the value is larger than cur_val,update it
                cur_val = nVector[i];
                smallestEven.push_back(cur_val);
            }
        } else { //if value is odd
            smallestEven.push_back(cur_val);            
        }
    }
    //largestOdd
    for (int i = n - 1; i >= 1; i--){
        if (nVector[i] % 2 != 0){ //if value is odd
            if(nVector[i] < cur_val){ // and the value is smaller than the cur_val
                smallestEven.push_back(cur_val);
            } else { //if the value is larger than cur_val,update it
                cur_val = nVector[i];
                smallestEven.push_back(cur_val);
            }
        } else { //if value is even
            smallestEven.push_back(cur_val);            
        }
    }

    //smallestEven
    for (int i = 0; i < n; i++){
        if (nVector[i] % 2 == 0){ //if value is even
            if(nVector[i] > cur_val){ // and the value is smaller than the cur_val
                smallestEven.push_back(cur_val);
            } else { //if the value is larger than cur_val,update it
                cur_val = nVector[i];
                smallestEven.push_back(cur_val);
            }
        } else { //if value is odd
            smallestEven.push_back(cur_val);            
        }
    }

    //smallestOdd
    for (int i = 0; i < n; i++){
        if (nVector[i] % 2 != 0){ //if value is odd
            if(nVector[i] > cur_val){ // and the value is smaller than the cur_val
                smallestEven.push_back(cur_val);
            } else { //if the value is larger than cur_val,update it
                cur_val = nVector[i];
                smallestEven.push_back(cur_val);
            }
        } else { //if value is even
            smallestEven.push_back(cur_val);            
        }
    }

    //testing purpose
    for (int i = 0; i < n; i++){
        cout<< largestEven[i] << " " << largestOdd[i] << " " << smallestEven[i] << " " << smallestOdd[i] << "\n";
    }

}


int main(long long int argv){
    //driver:
    long long int a;
    long long int b;
    long long int n; 
    long long int k;
    //1st input
    cin >> n;
    vector<long long int> n_values;
    //2nd input
    while (n_values.size() < n){
        cin >> a; 
        n_values.push_back(a);
    }

    vector<long long int> k_values;
    //3rd input
    cin >> k;

    vector<long long int> reverse_nValues;
    //4th input
    while (k_values.size() < k){
        cin >> b;
        k_values.push_back(b);
    }
    quickSort(n_values,0,n - 1);
    reverse(n_values.begin(),n_values.end());
    maxoddValue(n_values,k_values,n);

}

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

Мой файл launch.json выглядит следующим образом:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "g++ - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "lldb",
            "preLaunchTask": "C/C++: g++ build active file"
            
        }
    ]
}

Например, входной образец, который у меня есть:

4 4 2 1 3 3 2 3 4
0
Trodenn 7 Дек 2020 в 13:56

1 ответ

Лучший ответ
  • Если вы используете Visual Studio (VS), я предполагаю, что это в Windows.
  • Если вы хотите эффективно использовать VS, сначала создайте проект либо на стартовом экране VS (Create New Project), либо с помощью File-> New-> Project, если он уже находится внутри VS.
  • В вашем случае создайте проект «Пустой c ++» и укажите имя и расположение проекта на экране «Настройка».
  • В окне обозревателя решений щелкните правой кнопкой мыши и добавьте либо существующий файл c ++, либо создайте новый файл c ++ и скопируйте и вставьте свой код.
  • В раскрывающемся списке конфигурации решения выберите «Отладка».
  • В главном меню «Постройте» свое решение.
  • В главном меню «Отладка-> Начать отладку» или используйте F5.
  • Вам нужно разместить точку останова на строке, просто щелкните в пространстве слева от строки (попробуйте щелкнуть в разных местах слева от строки, и красная точка появится как точка останова)
  • Во время отладки будут открываться различные информационные окна, такие как текущее состояние переменных, значение переменных в строке, стек вызовов и т. Д.
  • Если исключение, проверьте окно «стек вызовов», и оно покажет вам последовательность (строки) программы, ведущей к исключению. Выбор предыдущих строк покажет состояние, приводящее к исключению.
  • Сочетания клавиш для отладки VS: F5 start, F11 step in, F10 step over и т. Д.
  • Отладка Google VS для получения дополнительной информации.

Надеюсь, это поможет :) или может дать дополнительные разъяснения.

0
TKA 7 Дек 2020 в 11:27