Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Just My Code — это функция отладки Visual Studio, которая автоматически пропускает вызовы к системному, библиотечному и другому непользовательскому коду. В окне стека вызовов только мой код сворачивает эти вызовы в [внешний код] кадров.
Просто мой код работает по-разному в проектах .NET и C++.
Включить или отключить опцию "Только мой код"
Для большинства языков программирования функция Just My Code включена по умолчанию.
Откройте панель Инструменты (или Отладка), разверните раздел >Отладка>Общие и установите или снимите флажок >:
Откройте диалоговое окно "Параметры инструментов" (или >"), разверните раздел>" и установите или снимите флажок "Включить только мой код":
Заметка
Включить только мой код — это глобальный параметр, который применяется ко всем проектам Visual Studio на всех языках.
Отладка только моего кода
Во время сеанса отладки в окне модулей показано, какие модули кода отладчик рассматривает как Мой Код (пользовательский код), а также состояние загрузки символов. Дополнительные сведения см. в статье Узнайте, как отладчик подключается к приложению.
В окне стека вызовов или задач задачи просто мой код свернет код без пользователя в серый кадр кода с меткой [External Code].
Совет
Чтобы открыть модули , стек вызовов, задачи или большинство других окон отладки, необходимо находиться в сеансе отладки. При отладке в разделе Отладка>Windowsвыберите окна, которые нужно открыть.
Чтобы просмотреть код в свернутом [внешний код] окне, щелкните правой кнопкой мыши в окне стека вызовов или задач и выберите Показать внешний код в контекстном меню. Развернутые внешние строки кода заменяют кадр [внешний код].
Заметка
показать внешний код — это текущий параметр профилировщика пользователей, который применяется ко всем проектам на всех языках, открытых пользователем.
Дважды щелкнув развернутую внешнюю строку кода в окне стека вызовов, в исходном коде выделена строка вызывающего кода зеленым цветом. Если библиотеки DLL или другие модули не найдены или не загружены, может открыться страница отсутствующего символа или исходного кода.
Начиная с Visual Studio 2022 версии 17.7, можно автокомпилировать код .NET, дважды щелкнув внешний код в окне стека вызовов. Дополнительные сведения см. в статье Создание исходного кода из сборок .NET при отладке.
.NET Just My Code
В проектах .NET функция Just My Code использует файлы символов (.pdb) и оптимизацию программ для классификации пользовательского и непользовательского кода. Отладчик .NET считает оптимизированные двоичные файлы и не загруженные PDB-файлы не пользовательским кодом.
Три атрибута компилятора также влияют на то, что отладчик .NET считает пользовательским кодом:
- DebuggerNonUserCodeAttribute сообщает отладчику, что примененный код не является пользовательским кодом.
- DebuggerHiddenAttribute скрывает код от отладчика, даже если функция "Только мой код" отключена.
- DebuggerStepThroughAttribute сообщает отладчику перейти через примененный код, а не войти в код.
Отладчик .NET считает весь другой код пользовательским кодом.
Во время отладки .NET:
- Отладка>Шаг внутрь (или F11) на этапе, не относящемся к пользовательскому коду, перепрыгивает к следующей строке пользовательского кода.
- отладка>шаг выхода (или Shift+F11) в коде, отличном от пользователя, выполняется в следующей строке пользовательского кода.
Если нет больше пользовательского кода, отладка продолжается до тех пор, пока не завершится, не встретит другую точку останова или не возникнет ошибка.
Если отладчик прерывается в коде, не принадлежащем пользователю (например, вы используете отладка>"Остановить все" и приостанавливаетесь в не пользовательском коде), появится окно "Нет исходного". Затем можно использовать команду шага отладки>, чтобы перейти к следующей строке пользовательского кода.
Если необработанное исключение возникает в коде, отличном от пользователя, отладчик прерывается в строке пользовательского кода, в которой было создано исключение.
Если для исключения включены исключения первого шанса, вызываемая строка пользовательского кода выделена зеленым цветом в исходном коде. В окне стека вызовов отображается фрейм с аннотацией, помеченный [внешний код].
C++ просто мой код
Начиная с версии 15.8 Visual Studio 2017, также поддерживается функция "Just My Code" для пошаговой отладки кода. Для этой функции также требуется использование параметра компилятора /JMC (только отладка моего кода). Переключатель включен по умолчанию в проектах C++. Для окна стек вызовов и поддержки стека вызовов в режиме "Just My Code" параметр /JMC не требуется.
Чтобы классифицироваться как пользовательский код, PDB для двоичного файла, содержащего пользовательский код, необходимо загрузить отладчиком (используйте окно модулей для проверки состояния загрузки).
Для поведения стека вызовов, например, в окне стека вызовов , Just My Code в C++ рассматривает только эти функции как не-пользовательский код:
- Функции с удаленной исходной информацией в их файле символов.
- Функции, в которых файлы символов указывают на отсутствие исходного файла, соответствующего кадру стека.
- Функции, указанные в файлах *.natjmc в папке %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
Для поведения пошагового выполнения кода в C++ только эти функции считаются непользовательский код:
- Функции, для которых соответствующий PDB-файл не загружается в отладчик.
- Функции, указанные в файлах *.natjmc в папке %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
Заметка
Для поддержки шагового выполнения кода в Just My Code код C++ должен быть скомпилирован с помощью компиляторов MSVC в Visual Studio 15.8 Preview 3 или более поздней версии, а параметр компилятора /JMC должен быть включен (он включен по умолчанию). Дополнительные сведения см. в статье "Настройка стека вызовов C++ и поведение пошагового выполнения кода" и эта запись блога. Для кода, скомпилированного с помощью старого компилятора, .natstepfilter-файлы являются единственным способом настройки пошагового выполнения кода, который не зависит от Just My Code. См. Настройка поведения C++ при пошаговой отладке.
во время отладки C++ непользовательский код пропускается по умолчанию. Во время отладки C++:
- Отладка>Шагнуть внутрь (или F11) на коде, не принадлежащем пользователю, либо перейти на следующую строку пользовательского кода, если Шагнуть внутрь вызывается из кода, не принадлежащего пользователю.
- Отладка>шаг выхода (или SHIFT+F11) в коде, отличном от пользователя, выполняется до следующей строки пользовательского кода (за пределами текущего кадра стека).
Если нет больше пользовательского кода, отладка продолжается до тех пор, пока не завершится, не встретит другую точку останова или не возникнет ошибка.
Если отладчик прерывается в коде, не относящемся к пользователю (например, используется отладка>прервать все и приостановить работу в коде, не относящемся к пользователю), шаг будет продолжаться в коде, не относящемся к пользователю.
Если отладчик сталкивается с исключением, он останавливается на исключении, будь то в пользовательском коде или коде системы. необработанные пользователем параметры в диалоговом окне "Параметры исключений " игнорируются.
Настройка стека вызовов C++ и поведения пошагового выполнения кода
Для проектов C++ можно указать модули, исходные файлы и функции, которые окно стека вызовов рассматривает как служебный код, указав их в файлах *.natjmc. Эта настройка также применяется к пошаговой отладке кода, если вы используете последний компилятор (см. раздел C++ Just My Code).
- Чтобы указать непользовательский код для всех пользователей компьютера Visual Studio, добавьте файл .natjmc в папку %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
- Чтобы указать код, не связанный с пользователем, добавьте файл .natjmc в папку %USERPROFILE%\My Documents\<версии Visual Studio>\Visualizers.
Файл .natjmc — это XML-файл с этим синтаксисом:
<?xml version="1.0" encoding="utf-8"?>
<NonUserCode xmlns="http://schemas.microsoft.com/vstudio/debugger/jmc/2015">
<!-- Modules -->
<Module Name="ModuleSpec" />
<Module Name="ModuleSpec" Company="CompanyName" />
<!-- Files -->
<File Name="FileSpec"/>
<!-- Functions -->
<Function Name="FunctionSpec" />
<Function Name="FunctionSpec" Module ="ModuleSpec" />
<Function Name="FunctionSpec" Module ="ModuleSpec" ExceptionImplementation="true" />
</NonUserCode>
Атрибуты элемента Module
| Атрибут | Описание |
|---|---|
Name |
Обязательно. Полный путь к модулю или модулям. Можно использовать подстановочные знаки Windows ? (ноль или один символ) и * (ноль или несколько символов). Например<Module Name="?:\3rdParty\UtilLibs\*" />сообщает отладчику обрабатывать все модули в \3rdParty\UtilLibs на любом диске как внешний код. |
Company |
Необязательный. Имя компании, которая публикует модуль, внедренный в исполняемый файл. Этот атрибут можно использовать для разрешения неоднозначностей модулей. |
атрибуты элемента файла
| Атрибут | Описание |
|---|---|
Name |
Обязательно. Полный путь к исходному файлу или файлам для обработки как внешнего кода. При указании пути можно использовать подстановочные знаки Windows ? и *. |
атрибуты элемента функции
| Атрибут | Описание |
|---|---|
Name |
Обязательно. Полное имя функции для рассмотрения как внешнего кода. При указании пути можно использовать подстановочные знаки Windows ? и *. |
Module |
Необязательный. Имя или полный путь к модулю, который содержит функцию. Этот атрибут можно использовать для диамбигуации функций с тем же именем. |
ExceptionImplementation |
Если задано значение true, стек вызовов отображает функцию, которая вызвала исключение, а не эту функцию. |
Настройка поведения шаговой отладки C++ независимо от параметров 'Только мой код'
В проектах C++ можно указать функции для пошагового выполнения, перечислив их как функции NoStepInto в файлах *.natstepfilter. Функции, перечисленные в *.natstepfilter файлах, не зависят от параметров "Только мой код". Функция NoStepInto сообщает отладчику перейти через функцию, даже если отладчик вызывает некоторые функции StepInto или другой код пользователя. В отличие от функций, перечисленных в .natjmc, отладчик переходит к первой строке пользовательского кода в функции NoStepInto.
- Чтобы указать непользовательский код для всех локальных пользователей Visual Studio, добавьте файл .natstepfilter в папку %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
- Чтобы задать код, не связанный с пользователем, добавьте файл .natstepfilter в папку %USERPROFILE%\My Documents\<Visual Studio version>\Visualizers.
Заметка
Некоторые расширения, отличные от Майкрософт, могут отключить функции .natstepfilter .
Файл .natstepfilter — это XML-файл с этим синтаксисом:
<?xml version="1.0" encoding="utf-8"?>
<StepFilter xmlns="http://schemas.microsoft.com/vstudio/debugger/natstepfilter/2010">
<Function>
<Name>FunctionSpec</Name>
<Action>StepAction</Action>
</Function>
<Function>
<Name>FunctionSpec</Name>
<Module>ModuleSpec</Module>
<Action>StepAction</Action>
</Function>
</StepFilter>
| Элемент | Описание |
|---|---|
Function |
Обязательно. Указывает одну или несколько функций в качестве непользовательских функций. |
Name |
Обязательно. Форматируемое регулярное выражение ECMA-262, указывающее полное имя функции, соответствующее. Например:<Name>MyNS::MyClass::.*</Name>сообщает отладчику, что все методы в MyNS::MyClass должны считаться не пользовательским кодом. Совпадение зависит от регистра. |
Module |
Необязательный. Отформатированное регулярное выражение ECMA-262, указывающее полный путь к модулю, содержащему функцию. Совпадение не учитывает регистр. |
Action |
Обязательно. Одно из этих вариантов, чувствительных к регистру:NoStepInto — сообщает отладчику пропустить выполнение функции.StepInto — указывает отладчику войти в функцию, переопределяя любую другую NoStepInto для данной функции. |
Дополнительные сведения о файлах .natstepfilter и .natjmc файлах
Начиная с Visual Studio 2022 версии 17.6, можно добавить .natjmc и .natstepfilter файлы непосредственно в решение или проект.
Синтаксические ошибки в файлах .natstepfilter и .natjmc не сообщаются в окне вывода отладчика.
В отличие от файлов .natvis , файлы .natstepfilter и .natjmc не загружаются повторно. Вместо этого эти файлы перезагрузятся в начале сеанса отладки.
Для функций шаблона использование
<.*>или<.*в имени может оказаться полезным.
JavaScript Только Мой Код
Для проектов .esproj в Visual Studio 2022, Visual Studio Code использует файл launch.json для настройки и кастомизации отладчика. launch.json — это файл конфигурации отладчика.
Visual Studio подключает отладчик только к пользовательскому коду. Для проектов .esproj можно настроить пользовательский код (то есть параметры Just My Code) в Visual Studio, используя настройку skipFiles в launch.json. Этот параметр работает так же, как и параметры launch.json в VS Code. Дополнительные сведения о skipFilesсм. в разделе Пропускание неинтересного кода.