Шаг VS Code в настройку отладчика

Когда я отлаживаю свой проект C ++ в VS Code и переключаю точку останова, опция «step into» перенаправляет меня на внешние файлы / библиотеки, но я хочу войти только в свой код.

Я попытался добавить параметр "justMyCode": true в файл launch.js, но он говорит, что это свойство недопустимо.

Что я могу сделать, чтобы просмотреть только исходный код?


person P. Milev    schedule 24.05.2020    source источник
comment
Не уверен в VS Code, но в обычной Visual Studio есть способ исключить отдельные файлы из шага в поведение. Проблема в том, что вам нужно настроить его для каждой функции, в которую вы не хотите входить.   -  person Mark Ransom    schedule 29.05.2020
comment
На какой платформе вы используете vscode? В Linux вы можете добиться этого, передав в GDB nosharedlibrary или просто удалив символы отладки через диспетчер пакетов.   -  person    schedule 31.05.2020
comment
Только мой код для C ++ - относительно новая функция для Visual Studio, VS Code явно не поддерживает ее, если вообще будет.   -  person Taekahn    schedule 01.06.2020
comment
VS Code поддерживает justMyCode ... но только для Python. Может быть, когда-нибудь это дойдет до C ++.   -  person jdaz    schedule 05.06.2020
comment
У меня была такая же проблема, но с gdb, хотя вы можете пропускать файлы с помощью gdb, я не мог заставить его работать в коде Visual Studio. Вот канал GitHub, в котором обсуждается эта тема: ссылка. Похоже, что за эту проблему проголосовали много раз, но усилия еще предстоит рассмотреть.   -  person Bogdan Ariton    schedule 26.05.2021


Ответы (2)


Одно можно было сделать с этой проблемой. Я собственно проверил свою тестовую программу:

std::vector<std::string> name;

std::cout << "Enter a name: ";
std::getline(std::cin, name);

nameList.push_back(name); // BREAKPOINT

Когда мы выбираем Step Into в выполнении точки останова, он перенаправляется на определение функции, в которой он фактически определен, в этом случае он не будет отлаживать только ваш файл.

Шаг к типу:

Шаг к отладке типа

Скорее, вы должны использовать Step Over, поскольку он не пытается найти определения функций, и вы можете напрямую отлаживать свой контент.

Тип перехода:

Пошаговая отладка типа

Step Into обязательно перенаправит вас в определение функции, где бы оно ни было определено, если вы хотите узнать объявление и другие вещи о связанной функции, это хорошая возможность использовать Step Into. Но в случае, если вы просто хотите отладить только строку и не хотите углубляться в детали и не хотите переходить к другому файлу, вы должны использовать Step Over.

Если вы хотите узнать больше о Step Into и Step Over, вы можете просмотреть эту ветку переполнения стека. Я тоже нашел это полезным.

person Rohan Bari    schedule 29.05.2020
comment
Это не ответ на вопрос и не решение проблемы. Например. если вы хотите отладить конструктор настраиваемого типа, вам нужно перейти в push_back (), вы не можете просто использовать Step Over, как вы предлагаете. - person ; 31.05.2020
comment
@para Step Into всегда будет копаться в функциях и их подфункциях, пока вы входите в них. Это похоже на то, что вы хотите сделать B с тем, что делает A. Примечание. Вы увидите переменные и их значения в левом углу даже после использования Step Over. - person Rohan Bari; 31.05.2020
comment
И да, если вы хотите отлаживать свои пользовательские функции, классы и т. Д., Тогда хорошо использовать Step Into везде в вашем коде. Но если вы использовали что-то встроенное, отладчик должен перейти к определению. - person Rohan Bari; 31.05.2020
comment
OP хочет, чтобы отладчик игнорировал весь код, написанный не им, когда он входит в функцию, это буквально его вопрос. Вы не касаетесь этого в своем ответе. Полная версия Visual Studio может это сделать, так что спросить не составит труда. - person ; 31.05.2020
comment
Visual Studio и Visual Studio Код отличаются. Еще раз проверьте вопрос. - person Rohan Bari; 31.05.2020
comment
Это действительно отвечает на вопрос, и я думаю, это правильное решение, поскольку функция, которую он хочет, явно не существует. - person Taekahn; 01.06.2020
comment
Это не ответ на вопрос! Если вы хотите перейти в функцию, аргумент которой является встроенным вызовом функции, вы не можете просто перешагнуть через нее, потому что вы переступите через все это! Если вы не можете предложить решение, не отвечайте, вы можете оставить комментарий! Существуют расширения для кода VS, которые предоставляют эту функциональность для других языков, это возможно для c ++, возможно, еще не реализовано, но на это можно ответить правильно! - person mdatsev; 02.06.2020

Это не идеальный ответ,

Предположим, вы отлаживаете следующий код:

func_that_we_care ( func_that_we_dont_care( i)  );   <== step into this line

и вы попадаете в "func_that_we_dont_care", вы можете "выйти", затем снова "перейти в", в конечном итоге вы сможете войдите в "func_that_we_care".

person grizzlybears    schedule 02.07.2020
comment
Думаю, вы говорите о Step Over, о котором я рассказывал в своем ответе. При входе в функцию вы должны перейти к определению функции или подпрограммы. Если вы можете игнорировать оператор func_that_we_dont_care(i)), не переходя через него, определите, как это сделать. - person Rohan Bari; 02.07.2020
comment
Этот случай можно решить, немного отредактировав код. auto foo = func_that_we_dont_care_about(i); /n func_that_we_care_about(foo); // step in here Неоптимально, но эффективно. - person Mark Storer; 24.08.2020