VSCode Debug открывает stl_map.h при попытке войти в функцию для ее отладки

#c #function #visual-studio-code #graph-theory #vscode-debugger

#c #функция #visual-studio-code #теория графов #vscode-debugger

Вопрос:

Я пытаюсь отладить графическую функцию, которая начинается с одной вершины и заканчивается в конечной вершине после ее нахождения с помощью алгоритма FS (First Search). При вызове функции в режиме отладки отладчик открывает stl_map.h (я предполагаю, что это происходит потому, что граф (вершины и ребра) были реализованы в map.

Параметрами функции являются (map, startPerson, endPerson). Я передаю карту и два параметра people следующим образом (имя функции — bfsFacebook):

 for (;;) {
        cout << endl << "Enter the name of the starting person:n";
        getline(cin, startingPerson);
        if (IS_QUIT(startingPerson))
            break;
        if (everyone.count(startingPerson) == 0) {
            cout << "Invalid starting name.";
            continue;
        }
        cout << endl << "Enter the name of the ending person:n";
        getline(cin, endingPerson);
        if (IS_QUIT(endingPerson))
            break;
        if (everyone.count(endingPerson) == 0) {
            cout << "Invalid ending name.";
            continue;
        }
        //Breath-First search from starting node to end node (starting vertext to end vertex)
        if (bfsFacebook(everyone, everyone[startingPerson], everyone[endingPerson]) == true) {
            cout << "Path found between " << startingPerson << " and " << endingPerson << endl;
        } else {
            cout << "Path Not Found between " << startingPerson << " and " << endingPerson << endl;
        }
        
    }
    cout << "Exiting..." << endl;
 

Вот фактическая функция:

 bool bfsFacebook(map<string, Person> everyone, Person amp;startingPerson, Person amp;endingPerson) {
    
    startingPerson.visited = true;
    if (startingPerson.name == endingPerson.name amp;amp; startingPerson.visited == true)
        return true;

    for (string somePerson : startingPerson.friends) {
        if (everyone[somePerson].visited == false amp;amp; bfsFacebook(everyone, everyone[somePerson], endingPerson)) {
            return true;
        }
            
    }

    return false;
}
 

Есть ли какая-либо конкретная причина, по которой переход в функцию во время отладки не отправляет меня к фактической функции?

Если мой вопрос недостаточно подробный, пожалуйста, дайте мне знать.

Ответ №1:

Строка вызова:

  bfsFacebook(everyone, everyone[startingPerson], everyone[endingPerson])
 

Начинается с разрешения аргументов перед bfsFacebook их вызовом.

У вас есть два вызова map<string, Person>::operator[](const stringamp;) , которые должны быть выполнены для разрешения everyone[startingPerson] и everyone[endingPerson] , поэтому следующая выполняемая строка в вашей программе находится в std::map


map<Key, Value>::operator[](const Keyamp;) Может быть оптимизирован в зависимости от сборки, но при отладке он, скорее всего, присутствует в коде.

Поскольку std::map экземпляр был создан для <string, Person> вашего собственного кода, у отладчика нет причин не вводить функцию, существование которой является вашей ответственностью.