Лише мій код, Microsoft Docs
Зміст
Увімкнення та вимкнення режиму "Тільки мій код"
"Тільки мій код" у .NET Framework
"Тільки мій код" у C++
Увімкнення та вимкнення режиму "Тільки мій код"
Щоб увімкнути або вимкнути режим "Тільки мій код", виберітьПараметри та налаштування у менюНалагодження. У вузліНалагодження /Загальні встановіть або зніміть прапорецьУвімкнути лише мій код.

ПараметрУвімкнути лише мій код є глобальним параметром, який застосовується до всіх проектів Visual Studio усіма мовами.
Фільтрування стеку викликів перевизначення
ПараметрПоказати зовнішній код зберігається у профільувачі поточного користувача.Він застосовується до всіх проектів усіма мовами, що відкриваються цим користувачем.
"Тільки мій код" у .NET Framework
Код користувача та код, не написаний користувачем****Поведінка покрокового виконанняПоведінка точок зупинкиПоведінка винятків
Код користувача та код, не написаний користувачем
Щоб відрізнити код користувача від іншого коду, функція "Тільки мій код" розглядає відкриті проекти, файли символів (.pdb) та програмну оптимізацію.
Якщо двійковий файл створюється з відкритого проекту Visual Studio, він завжди вважається кодом користувача.
Відладчик вважає код, який не написаний користувачем, якщо двійковий файл оптимізується або якщо pdb-файл недоступний.
Три атрибути також впливають на те, який код відладчик вважаємо кодом користувача:
DebuggerNonUserCodeAttribute повідомляє відладчику, що код, до якого він застосовується, не є користувачем.
DebuggerHiddenAttribute приховує код від налагоджувача, навіть якщо режим "Тільки мій код" увімкнено.
DebuggerStepThroughAttribute вказує відладчику виконати в покроковому режимі код, до якого він застосовується, а не здійснювати крок із заходом до цього коду.
Весь решта коду вважається користувальницьким.
Поведінка покрокового виконання
При виконанніКроку із заходом (клавіша F11) всередину коду, не написаного користувачем, відладчик виконує цей код з переходом до наступного оператора користувача. При виконанніКроку з виходом (поєднання клавіш: Shift + F11) відладчик переходить до наступного рядка коду користувача. Якщо код користувача не виявляється, виконання продовжується до завершення роботи програми, досягнення точки зупинки або виникнення виключення.
Поведінка точки зупинки
Якщо увімкнено режим "Тільки мій код", можна вибратиПрорвати все (поєднання клавіш: Ctrl + Alt + Break) і зупинити виконання в місці, де немає коду користувача. Коли це відбувається, з'явиться вікно "Немає вихідного коду". Якщо потім вибирається команда "Крок", відладчик переходить до наступного рядка коду користувача.
Поведінка виключення
При виникненні необробленого виключення в коді, написаному не користувачем, відладчик переривається на тому рядку коду користувача, де було створено виняток.
Якщо для цього виключення увімкнена первинна обробка виключення, рядок коду користувача виділяється зеленим кольором. Стек дзвінків відображає кадр з анотаціями з підписом[Зовнішній код].
"Тільки мій код" у C++
Код користувача та код, не написаний користувачем**Поведінка покрокового виконанняПоведінка виключенняНалаштування поведінки покрокового виконання **Налаштування поведінки стека викликів
Код користувача та код, не написаний користувачем
Стеки викликів
За промовчанням відладчик вважає ці функції кодом, не написаним користувачем, у вікнах стека дзвінків.
Функції з відкритою інформацією у файлі символів.
Функції, в яких файли символів вказують, що вихідний файл, який відповідає кадру стека, відсутній.
Функції, визначені у файлах *.natjmc у папці %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
Налагодження по кроках
За промовчанням лише функції, визначені у файлах *.natstepfilter у папці %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers вважаються кодом, не написаним користувачем.
Можна створити власні .natstepfilter і .natjmc для налаштування покрокового виконання та поведінки вікна стека дзвінків у %USERPROFILE%\My Documents\Visual Studio 2013\Visualizers.
Поведінка покрокового виконання
При виконанніКроку з заходом (клавіша F11) всередину коду, не написаного користувачем, з коду користувача відладчик виконує цей код з переходом до наступного рядка коду користувача. При виконанніКроку з виходом (поєднання клавіш: Shift + F11) відладчик переходить до наступного рядка коду користувача. Якщо код користувача не виявляється, виконання продовжується до завершення роботи програми, досягнення точки зупинки або виникнення виключення.
Якщо налагоджувач робить зупинку в коді, не написаному користувачем (наприклад, якщо команда "Перервати все" зупиняє в коді, не написаному користувачем), покрокове виконання продовжується в коді, не написаному користувачем.
Поведінка виключення
Якщо налаштовувач виявляє виняток, він зупиняється на виключенні незалежно від того, чи він у коді користувача. ПараметриНе обробленікористувальницьким кодом у діалоговому вікніВиключення ігноруються.
Налаштування поведінки покрокового виконання
Можна визначити функції, які будуть проходити без зупинки шляхом внесення їх як коду, не написаного користувачем, у файли *.natstepfilter.
Щоб вказати код, не написаний користувачем, для всіх користувачів комп'ютера з Visual Studio, додайте файл .natstepfilter до папки %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
Щоб вказати код, не написаний користувачем, для окремого користувача, додайте файл .natstepfilter до папки %USERPROFILE%\My Documents\Visual Studio 2013\Visualizers.
Файли .natstepfilter є XML-файлами з наступним синтаксисом:
Обов'язковий. Вказує одну або кілька функцій як функцію, не написану користувачем.
Обов'язковий. Регулярний вираз у форматі ECMA-262, що містить повне ім'я функції для зіставлення. Наприклад:
повідомляє відладчику, що всі методи MyNS::MyClass, повинні вважатися кодом, не написаним користувачем. Зіставлення враховує регістр.
Не обов'язково. Регулярний вираз у форматі ECMA-262, що вказує на повний шлях до модуля, що містить функцію. Зіставлення не враховує регістр.
Обов'язковий. Одне з наступних чутливих до регістру значень:
NoStepInto — вказує налагоджувачу, що необхідно пройти відповідну функцію без зупинки.
StepInto — вказує відладчику, що необхідно здійснювати покрокове виконання із заходом у відповідні функції, скасовуючи решту інструкцій NoStepInto для відповідних функцій.
Налаштування поведінки стека викликів
Можна вказати модулі, файли вихідного коду та функції, які потрібно розглядати як код,не написаний користувачем, у стеках дзвінків, вказавши їх у файлах *.natjmc.
Щоб вказати код, не написаний користувачем, для всіх користувачів комп'ютера з Visual Studio, додайте файл .natjmc до папки %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
Щоб вказати код, не написаний користувачем, для окремого користувача, додайте файл .natjmc до папки %USERPROFILE%\My Documents\Visual Studio 2013\Visualizers.
Файли .natjmc є XML-файлами з наступним синтаксисом:
Атрибути елементів модуля
Обов'язковий. Повний шлях до модуля чи модулів. Чи можна використовувати підстановні знаки Windows? (нуль або один символ) та * (нуль або більше символів). Наприклад:
вказує відладчику, що необхідно розглядати всі модулі \3rdParty\UtilLibs на будь-якому диску як зовнішній код.
Не обов'язково. Назва компанії, що публікує модуль, впроваджений у файл, що виконується. Цей атрибут можна використовувати для усунення неоднозначності модулів.
Атрибути елементів файлу
Обов'язковий. Повний шлях до файлу або вихідного коду, який необхідно вважати зовнішнім кодом. Чи можна використовувати підстановочні знаки Windows ? та *.
Атрибути елементів функцій
Обов'язковий. Повне ім'я функції, яку слід розглядати як зовнішній код.
Не обов'язково. Ім'я модуля або повний шлях до модуля, який містить цю функцію. Цей атрибут можна використовувати для виправлення неоднозначності функцій з однаковими іменами.
Якщо встановлено значення true, стек дзвінків відображає функцію, яка створила виняток, а не цю функцію.
Код користувача та код, не написаний користувачем**Поведінка покрокового виконанняПоведінка точокзупинкаПоведінка винятків **Налаштування режиму "Тільки мій код"
Код користувача та код, не написаний користувачем
Класифікації коду
MyCode
Код користувача, яким ви розпоряджуєтеся та керуєте.
LibraryCode
Код, не написаний користувачем, отриманий з бібліотек, якими ви користуєтеся регулярно та від яких залежить правильна робота програми (наприклад, WinJS або jQuery).
UnrelatedCode
Скрипт, який виконується шляхом передачі рядка наданої хостом функції eval, класифікується якMyCode.
Скрипт, який виконується шляхом передачі рядка конструктору Function, класифікується якLibraryCode.
Скрипт, який міститься у посиланні платформи, наприклад WinJS або SDK Azure, класифікується якLibraryCode.
Скрипт, який виконується шляхом передачі рядка функцій setTimeout, setImmediate або setInterval, класифікується якUnrelatedCode.
Весь решта коду класифікується якMyCode.
Поведінка покрокового виконання
Якщо функція не відноситься до коду користувача (MyCode ), операціяКрок із заходом (клавіша F11) поводиться якКрок з обходом (клавіша F10).
Якщо крок починається в коді, не написаному користувачем (LibraryCode абоUnrelatedCode ), покрокове виконання тимчасово здійснюється, ніби режим "Тільки мій код" не увімкнено. Відразу після повернення до коду користувача покрокове виконання в режимі "Тільки мій код" відновлюється.
Якщо крок у коді користувача призводить до виходу з поточного контексту виконання (наприклад, при виконанні кроку в останньому рядку обробника подій), відладчик зупиняється на наступнійрядку коду користувача. Наприклад, якщо зворотній виклик виконується в кодіLibraryCode, налагоджувач продовжує виконання, доки не буде виконано наступний рядок коду користувача.
Крок з виходом (поєднання клавіш: Shift + F11) зупиняється на наступному рядку коду користувача. Якщо код користувача не виявляється, виконання продовжується до завершення роботи програми, досягнення точки зупинки або виникнення виключення.
Поведінка точки зупинки
Точки зупинки, задані в будь-якому коді, завжди дотримуються незалежно від класифікації цього коду
Якщо ключове слово debugger виявляється у:
кодіLibraryCode, відладчик завжди зупиняється.
кодіUnrelatedCode, відладчик не зупиняється.
Поведінка виключення
Якщо необроблений виняток виникає в:
кодіMyCode абоLibraryCode, відладчик завжди зупиняється.
кодіUnrelatedCode,MyCode абоLibraryCode у стеку викликів, відладчик зупиняється.
Якщо для цього виключення включено первинну обробку в діалоговому вікні "Винятки" і цей виняток створюється в кодіLibraryCode абоUnrelatedCode :
Якщо виняток опрацьовується, відладчик не зупиняється.
Якщо виняток не обробляється, відладчик зупиняється.
Налаштування режиму "Тільки мій код"
Щоб розділити код користувача та код, не написаний користувачем, для окремого проекту Visual Studio, додайте файл .json з ім'ям mycode.json до кореневої папки проекту.
Класифікації виконуються у такому порядку:
Класифікації за замовчуванням
Класифікації у файлі mycode. json поточного проекту.
Кожен крок класифікації перевизначає попереднікроки. Файл .json не повинен відображати всі пари "ключ-значення", а значенняMyCode,Бібліотеки таUnrelated можуть бути порожніми масивами.
Файли .json коду користувача використовують наступний синтаксис:
Eval, функція та ScriptBlock
Пари "ключ-значення"Eval,Функція іScriptBlock визначають, як класифікується код, що динамічно створюється.
Eval
Скрипт, який виконується шляхом передачі рядка наданої хостом функції eval. За промовчанням скрипт Eval класифікується якMyCode.
Функція
Скрипт, який виконується шляхом передачі рядка до конструктора Function. За промовчанням скрипт Функція класифікується якLibraryCode.
ScriptBlock
Скрипт, який виконується шляхом передачі рядка функцій setTimeout, setImmediate або setInterval. За замовчуванням скрипт ScriptBlock класифікується якUnrelatedCode.
Це значення можна змінити на одне з таких ключових слів:
MyCode класифікує скрипт якMyCode.
Library класифікує скрипт якLibraryCode.
Unrelated класифікує скрипт якUnrelatedCode.
MyCode, бібліотеки та Unrelated
MyCode
Бібліотеки
Самостійний