включить только мой код visual studio
/JMC (отладка «Только мой код»)
указывает поддержку компилятора для отладки машинного Только мой код в отладчике Visual Studio. этот параметр поддерживает параметры пользователя, которые позволяют Visual Studio выполнять шаг с обходом системы, платформы, библиотеки и других вызовов, не являющихся пользователями, а также сворачивать эти вызовы в окне стек вызовов. параметр компилятора /жмк доступен начиная с Visual Studio 2017 версии 15,8.
Синтаксис
Remarks
параметры Только мой код Visual Studio указывают, будут ли отладчики Visual Studio шагами с системой, платформой, библиотекой и другими вызовами, не являющимися пользователями. Параметр компилятора /жмк обеспечивает поддержку отладки только мой код в собственном коде C++. Когда /жмк включен, компилятор вставляет вызовы в вспомогательную функцию, __CheckForDebuggerJustMyCode в прологе функции. вспомогательная функция предоставляет обработчики, поддерживающие Visual Studio отладчик Только мой код операций шага. чтобы включить Только мой код в отладчике Visual Studio, в строке меню выберите сервис > параметры, а затем установите параметр отладка > General > enable Только мой код.
По умолчанию параметр компилятора /жмк отключен. однако начиная с Visual Studio 2017 версии 15,8 этот параметр включен в большинстве Visual Studio шаблонов проектов. Чтобы явно отключить этот параметр, используйте параметр /жмк- в командной строке. в Visual Studio откройте диалоговое окно страницы свойств проекта и измените свойство поддержка Только мой код отладка на странице свойства конфигурации > C/C++ > общие на нет.
дополнительные сведения см. в разделе c++ Только мой код in укажите, следует ли выполнять отладку только пользовательского кода с помощью Только мой код в Visual Studio, а также запись блога группы Visual C++, в которой указывается Только мой код C++ Visual Studio.
Установка данного параметра компилятора в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации > C/C++ > Общие.
Отладка пользовательского кода с помощью функции «Только мой код»
Включение или отключение режима «Только мой код»
Для большинства языков программирования режим «Только мой код» включен по умолчанию.
Параметр Включить только мой код является глобальным параметром, который применяется ко всем проектам Visual Studio на всех языках.
отладка «Только мой код»
Во время сеанса отладки в окне Модули отображаются модули кода, которые отладчик воспринимает как «Мой код» (т. е. пользовательский код), а также состояние загрузки их символов. Дополнительные сведения см. в разделе Дополнительные сведения о присоединении отладчика к приложению.
Открывать окна Модули, Стек вызовов и Задачи, как и большинство других окон отладки, можно только в сеансе отладки. В сеансе отладки выберите окна, которые нужно открыть, в разделе Отладка > Окна.
Параметр Показать внешний код является текущим пользовательским параметром профилировщика, который применяется ко всем проектам на всех языках, открываемых этим пользователем.
Если дважды щелкнуть строку развернутого внешнего кода в окне Стек вызовов, строка вызывающего кода в исходном коде будет выделена зеленым. Для библиотек DLL или других модулей, которые не найдены или не загружены, может открыться страница, сообщающая, что символ или источник не найден.
На то, какой код отладчик посчитает пользовательским, также влияют три следующих атрибута.
Если пользовательского кода больше нет, будет продолжена отладка (до завершения или до достижения другой точки останова) либо появится сообщение об ошибке.
Если отладчик прерывается в непользовательском коде (например, вы выбрали Отладка > Прервать все и приостановили выполнение в непользовательском коде), появляется окно Нет источника. Затем вы можете использовать команду Отладка > Шаг, чтобы перейти к следующей строке пользовательского кода.
При возникновении необработанного исключения в непользовательском коде отладчик прерывается на той строке в пользовательском коде, где было создано исключение.
«Только мой код» в C++
Функция «Только мой код» для пошагового выполнения кода поддерживается начиная с Visual Studio 2017 версии 15.8. Чтобы использовать эту функцию, необходимо включить параметр компилятора /JMC (отладка «Только мой код»). В проектах C++ этот параметр включен по умолчанию. Для окна Стек вызовов и поддержки стека вызовов в режиме «Только мой код» параметр /JMC не требуется.
Чтобы код мог быть классифицирован как пользовательский, отладчик должен загрузить PDB-файл для двоичного файла, содержащего пользовательский код (это можно проверить в окне Модули).
В отношении функционирования стека вызовов, например в окне Стек вызовов, в режиме «Только мой код» в C++ непользовательским кодом считаются только следующие функции.
Что касается пошагового выполнения кода, в режиме «Только мой код» в C++ непользовательским кодом считаются только следующие функции.
Для поддержки пошагового выполнения кода в режиме «Только мой код» код C++ должен быть скомпилирован с использованием компиляторов MSVC в Visual Studio 15.8 предварительной версии 3 или более поздней версии, и должен быть включен параметр компилятора /JMC (он включен по умолчанию). Дополнительные сведения см. в разделе Настройка поведения стека вызовов и пошагового выполнения кода в C++ и в этой записи блога. Если код был скомпилирован с использованием более старого компилятора, файлы .natstepfilter являются единственным способом настройки пошагового выполнения кода, который не зависит от режима «Только мой код». См. раздел Настройка поведения пошагового выполнения кода C++.
Если пользовательского кода больше нет, будет продолжена отладка (до завершения или до достижения другой точки останова) либо появится сообщение об ошибке.
Если отладчик прерывается в непользовательском коде (например, вы выбрали Отладка > Прервать все и приостановили выполнение в непользовательском коде), пошаговое выполнение продолжается в непользовательском коде.
Если отладчик обнаруживает исключение, он останавливается на этом исключении, независимо от того, в каком коде оно находится — пользовательском или непользовательском. Параметры Не обработанные пользователем в диалоговом окне Параметры исключения игнорируются.
Настройка поведения стека вызовов и пошагового выполнения кода в C++
В проектах C++ можно указывать модули, исходные файлы и функции, которые окно Стек вызовов будет считать непользовательским кодом. Для этого нужно указать их в файлах *.natjmc. Эта настройка также применяется к пошаговому выполнению кода, если используется последняя версия компилятора (см. раздел»Только мой код» в C++).
Файл .natjmc является XML-файлом и имеет следующий синтаксис.
Атрибуты элементов модуля
указывает отладчику, что необходимо рассматривать все модули в \3rdParty\UtilLibs на любом диске как внешний код.
Атрибуты элементов файла
Атрибуты элементов функций
Настройка поведения пошагового выполнения кода в C++ независимо от параметров режима «Только мой код»
В проектах C++ можно указать функции, для которых будут выполняться шаги с обходом, внеся их в файлы *.natstepfilter как непользовательский код. Функции, указанные в файлах *.natstepfilter, не зависят от параметров режима «Только мой код».
Файл .natstepfilter является XML-файлом и имеет следующий синтаксис.
Элемент | Описание |
---|---|
Function | Обязательный. Указывает одну или несколько функций как функцию, не написанную пользователем. |
Name | Обязательный. Регулярное выражение в формате ECMA-262, содержащее полное имя функции для сопоставления. Пример: NoStepInto — указывает отладчику, что необходимо пройти соответствующую функцию без остановки. |
«Только мой код» в JavaScript
Режим «Только мой код» в JavaScript управляет пошаговым выполнением и отображением стека вызовов путем распределения кода по одной из следующих классификаций:
Классификация | Описание |
---|---|
MyCode | Код пользователя, которым вы распоряжаетесь и управляете. |
LibraryCode | Непользовательский код из библиотек, который вы используете регулярно, и от которого зависит правильная работа приложения (например, WinJS или jQuery). |
UnrelatedCode | Непользовательский код в приложении, который не является вашим и от которого не зависит правильная работа приложения. Например, это может быть рекламный пакет SDK, который отображает рекламу. В проектах UWP любой код, который загружается в приложение из URI HTTP или HTTPS, также считается UnrelatedCode. |
Отладчик JavaScript классифицирует код как пользовательский или непользовательский в следующем порядке.
Классификации по умолчанию.
Классификации, указанные для всех проектов JavaScript Visual Studio в файле %VSInstallDirectory%\JavaScript\JustMyCode\mycode.default.wwa.json.
Классификации в файле mycode.json текущего проекта.
Каждый шаг классификации переопределяет предыдущие шаги.
Весь остальной код классифицируется как MyCode.
Вы можете изменить классификации по умолчанию и классифицировать определенные файлы и URL-адреса как пользовательский или непользовательский код путем добавления файла .json с именем mycode.json в корневую папку проекта JavaScript. См. раздел Настройка режима «Только мой код» в JavaScript.
При отладке в JavaScript:
Если пользовательского кода больше нет, будет продолжена отладка (до завершения или до достижения другой точки останова) либо появится сообщение об ошибке.
В установленные в коде точки останова переход выполняется всегда, но код классифицируется.
Если необработанное исключение встречается в коде MyCode или LibraryCode, отладчик всегда останавливается.
Если необработанное исключение встречается в коде UnrelatedCode, и MyCode или LibraryCode находится в стеке вызовов, отладчик останавливается.
Если для данного исключения включена первичная обработка и это исключение возникает в коде LibraryCode или UnrelatedCode:
Настройка режима «Только мой код» в JavaScript
Чтобы разделить пользовательский и непользовательский код для отдельного проекта Visual Studio, можно добавить файл .json с именем mycode.json в корневую папку проекта.
Спецификации в этом файле переопределяют классификации по умолчанию и файл mycode.default.wwa.json. В файле mycode.json не нужно перечислять все пары «ключ-значение». Значения MyCode, Libraries и Unrelated могут быть пустыми массивами.
В файлах Mycode.json используется следующий синтаксис.
«Eval», «Function» и «ScriptBlock»
Пары «ключ-значение» Eval, Function и ScriptBlock определяют, как классифицируется динамически создаваемый код:
Можно изменить это значение на одно из следующих ключевых слов:
«MyCode», «Libraries» и «Unrelated»
Пары «ключ-значение» MyCode, Libraries и Unrelated определяют URL-адреса или файлы, которые нужно включить в классификацию:
name | Описание |
---|---|
MyCode | Массив URL-адресов или файлы, которые классифицируются как MyCode. |
Libraries | Массив URL-адресов или файлы, которые классифицируются как LibraryCode. |
Unrelated | Массив URL-адресов или файлы, которые классифицируются как UnrelatedCode. |
Переходите по коду с помощью отладчика Visual Studio
С помощью отладчика Visual Studio можно переходить по коду для проверки состояния приложения и просмотра последовательности выполнения. Для быстрого перехода к коду, который необходимо изучить, можно использовать сочетания клавиш, команды отладки, точки останова и другие функции. Знание команд навигации и сочетаний клавиш в отладчике ускоряет и упрощает поиск и устранение неполадок в приложениях.
Если вы не знакомы с процессом отладки кода, перед выполнением задач в этой статье рекомендуется прочесть документ об отладке для начинающих и статью Методы и инструменты отладки.
Переход в режим приостановки выполнения
В режиме приостановки выполнения выполнение приложения приостанавливается, но функции, переменные и объекты при этом остаются в памяти. Когда отладчик находится в режиме приостановки выполнения, можно переходить по коду. Наиболее распространенные способы быстрого перехода в режим приостановки выполнения:
Начните пошаговое выполнение кода, нажав клавишу F10 или F11. Это позволит быстро найти точку входа в приложение, после чего можно продолжать использовать команды пошагового выполнения для перехода по коду.
Например, в редакторе кода в Visual Studio можно использовать команду Выполнить до текущей позиции, чтобы запустить приложение, присоединить отладчик и перейти в режим приостановки выполнения, а затем нажать клавишу F11 для перехода по коду.
В режиме приостановки выполнения можно переходить по коду, используя различные команды. Во время режима приостановки выполнения можно выполнять поиск ошибок и нарушений целостности данных, проверяя значения переменных. Для некоторых типов проектов можно также вносить корректировки в приложение.
Большинство окон отладчика, таких как Модули и Контрольные значения, доступны только тогда, когда отладчик присоединен к приложению. Некоторые возможности отладчика, такие как просмотр значений переменных в окне локальных переменных или вычисление выражений в окне контрольных значений, доступны только при приостановке отладчика (то есть в режиме приостановки выполнения).
Если во время приостановки выполнения кода не загружены исходные файлы или файлы символов (PDB), отладчик отображает страницу Исходный файл не найден или Символы не найдены, которая поможет найти и загрузить файлы. См. статью Указание файлов символов (.pdb) и файлов с исходным кодом в отладчике Visual Studio. Если вы не можете загрузить исходные файлы или файлы символов, можно выполнить отладку инструкций на языке ассемблера в окне Дизассемблирование.
Пошаговое прохождение кода
С помощью команд пошагового выполнения отладчика можно проверять состояние приложения или изучать его последовательность выполнения.
Построчное выполнение кода
Для остановки выполнения на каждом операторе во время отладки используйте команду Отладка > Шаг с заходом или нажмите клавишу F11.
Отладчик осуществляет пошаговое выполнение операторов кода, а не физических строк. Например, предложение if может быть записано в одной строке:
Однако при пошаговом выполнении этой строки отладчик обрабатывает условие как один шаг, а следствие — как другой. В предыдущем примере условие выполняется.
При выполнении каждой строки кода можно наводить указатель мыши на переменные, чтобы просматривать их значения, или использовать окна Локальные переменные и Контрольные значения для наблюдения за изменением значений. Кроме того, можно визуально отслеживать стек вызовов при выполнении шагов с заходом в функции. (Сведения, касающиеся только Visual Studio Enterprise, см. в статье Сопоставление методов в визуализации стека вызовов при отладке.)
Пошаговое прохождение кода и пропуск некоторых функций
Во время отладки некоторые функции могут вас не интересовать или вы можете знать, что они работают, как в случае с тщательно протестированным кодом библиотеки. Чтобы пропустить код во время пошагового выполнения, можно использовать приведенные ниже команды. Функции по-прежнему выполняются, но отладчик пропускает их.
Команда с клавиатуры | Команда меню «Отладка» | Описание |
---|---|---|
F10 | Шаг с обходом | Если текущая строка содержит вызов функции, команда Шаг с обходом выполняет код, а затем останавливает выполнение в первой строке кода после возврата управления вызываемой функцией. |
SHIFT+F11 | Шаг с выходом | Команда Шаг с выходом возобновляет выполнение кода и приостанавливает выполнение, когда текущая функция возвращает управление. Отладчик пропускает текущую функцию. |
Выполнение до указанного места или функции
Вам может потребоваться выполнить код непосредственно до определенного места или функции, если вы точно знаете, какой код нужно проверить или с какого места следует начать отладку.
Выполнение до точки останова в коде
Чтобы задать простую точку останова в коде, щелкните в левом поле напротив строки кода, в которой нужно приостановить выполнение. Можно также выбрать строку и нажать клавишу F9, выбрать команду Отладка > Переключить точку останова или щелкнуть правой кнопкой мыши и выбрать команду Точка останова > Вставить точку останова. Точка останова отображается как красный кружок в левом поле рядом со строкой кода. Отладчик приостанавливает выполнение непосредственно перед выполнением строки.
Точки останова в Visual Studio предоставляют широкий набор дополнительных функций, таких как условные точки останова и точки трассировки. Дополнительные сведения см. в статье Использование точек останова.
Выполнение до точки останова функции
Можно дать отладчику команду на выполнение до тех пор, пока не будет достигнута определенная функция. Можно задать функцию по имени или выбрать ее из стека вызовов.
Указание точки останова функции по имени
Выберите команду Отладка > Создать точку останова > Точка останова функции.
В диалоговом окне Новая точка останова функции введите имя функции и выберите ее язык.
Нажмите кнопку ОК.
Если функция перегружается или находится в нескольких пространствах имен, нужную функцию можно выбрать в окне Точки останова.
Выбор точки останова функции из стека вызовов
Во время отладки откройте окно Стек вызовов, выбрав пункт Отладка > Окна > Стек вызовов.
В окне Стек вызовов щелкните правой кнопкой мыши имя функции и выберите команду Выполнить до текущей позиции или нажмите клавиши CTRL+F10.
Сведения о визуальном отслеживании стека вызовов см. в статье Сопоставление методов в визуализации стека вызовов при отладке.
Выполнение до расположения курсора
Чтобы выполнить код до позиции курсора, в окне исходного кода или в окне Стек вызовов выберите строку, в которой нужно прервать выполнение, щелкните ее правой кнопкой мыши и выберите команду Выполнить до текущей позиции или нажмите клавиши CTRL+F10. Выбор команды Выполнить до текущей позиции аналогичен заданию временной точки останова.
Выполнение до щелкнутого
Во время приостановки работы отладчика можно навести указатель мыши на оператор в исходном коде или в окне Дизассемблирование и щелкнуть значок с зеленой стрелкой Выполнить до этого места. Использование команды Выполнение до щелкнутого позволяет не устанавливать временную точку останова.
Команда Выполнение до щелкнутого доступна начиная с версии Visual Studio 2017.
Приостановка выполнения кода вручную
Чтобы приостановить выполнение в следующей доступной строке кода в выполняющемся приложении, выберите команду Отладка > Прервать все или нажмите клавиши CTRL+ALT+BREAK.
Перемещение указателя для изменения потока выполнения
Когда работа отладчика приостановлена, желтая стрелка в поле исходного кода или в окне Дизассемблированный код отмечает текущее расположение оператора, который должен быть выполнен следующим. Вы можете изменить оператор, который будет выполнен следующим, переместив эту стрелку. Можно пропустить часть кода или вернуться к предыдущей строке. Перемещение указателя полезно при возникновении таких ситуаций, как пропуск раздела кода, содержащего известную ошибку.
Для изменения оператора, который будет выполнен следующим, отладчик должен находиться в режиме приостановки выполнения. В окне исходного кода или окне Дизассемблированный код перетащите желтую стрелку в другую строку или щелкните правой кнопкой мыши строку, которую нужно выполнить следующей, и выберите команду Задать следующий оператор.
Счетчик программы переходит непосредственно к новому расположению, и инструкции между старой и новой точками не выполняются. Однако при перемещении точки выполнения обратно промежуточные инструкции не отменяются.
Отладка кода, не являющегося пользовательским
По умолчанию отладчик пытается выполнить отладку только кода вашего приложения, так как включена функция Только мой код. Дополнительные сведения о том, как эта функция работает с проектами различных типов и на разных языках, а также о том, как настроить ее, см. в статье Только мой код.
Для просмотра кода платформы, кода сторонней библиотеки или системных вызовов во время отладки можно отключить функцию «Только мой код». В меню Сервис (или Отладка) выберите пункты Параметры > Отладка и снимите флажок Включить только мой код. Когда функция «Только мой код» отключена, в окнах отладчика отображается код, не являющийся пользовательским, и отладчик может выполнять его по шагам.
Режим «Только мой код» не поддерживается для проектов устройств.
Отладка системного кода
Если вы загрузили отладочные символы для системного кода Майкрософт и отключили режим «Только мой код», можно производить шаг с заходом в системный вызов так же, как в любой другой вызов.
Сведения о загрузке символов Майкрософт см. в разделе Настройка расположения символов и параметров загрузки.
Чтобы загрузить символы для определенного системного компонента, выполните указанные ниже действия.
Во время отладки откройте окно Модули, выбрав пункт Отладка > Окна > Модули или нажав клавиши CTRL+ALT+U.
Определить, для каких модулей символы загружены, можно по значению в столбце Состояние символов в окне Модули. Щелкните правой кнопкой мыши модуль, для которого требуется загрузить символы, и выберите команду Загрузить символы.