Отладка для абсолютных начинающих
Область применения:Visual Studio Visual Studio для Mac Visual Studio Code
Независимо от обстоятельств код, создаваемый разработчиками программного обеспечения, далеко не всегда работает так, как задумано. В некоторых случаях все идет совершенно не по плану! Когда происходит непредвиденное, следующая задача заключается в том, чтобы выяснить, почему, и хотя мы можем просто заманчиво просто следить за нашим кодом в течение нескольких часов, проще и эффективнее использовать средство отладки или отладчик.
К сожалению, отладчик не является той волшебной палочкой, по мановению которой будут выявлены абсолютно все проблемы в коде. Процесс отладки подразумевает пошаговое выполнение кода в средстве отладки (например, в Visual Studio) в поисках точки, в которой вы допустили ошибку при написании программы. Таким образом вы узнаете, какие исправления нужно внести в код. При этом средства отладки часто позволяют вносить временные изменения, чтобы продолжить работу с программой.
Эффективное использование отладчика также требует определенных навыков, которые вырабатываются только с практикой, однако умение работать с ним является основополагающим требованием к любому разработчику программного обеспечения. В этой статье мы представим основные принципы отладки и некоторые начальные рекомендации.
Проанализируйте проблему, задавая себе правильные вопросы
Это поможет вам выяснить, в чем состоит проблема, прежде чем приступать к ее решению. Мы полагаем, что вы уже сталкивались с проблемами в коде, иначе вряд ли читали бы сейчас эту статью в поисках советов по его отладке! Итак, прежде чем начать отладку, проанализируйте проблему, которую вы пытаетесь решить:
- Что именно должен был выполнить код?
- Что произошло на самом деле? Если при запуске приложения возникает ошибка (исключение), это может быть хорошо! Исключение возникает в том случае, если при выполнении кода происходит непредвиденное событие (как правило, это ошибка какого-либо рода). С помощью средства отладки вы можете перейти точно к тому месту в коде, где возникло исключение, и исследовать возможные способы исправления ситуации. Если произошло что-то еще, каковы признаки проблемы? Есть ли у вас предположения относительно того, в каком месте кода возникла проблема? Например, если код должен выводить какой-то текст, но при этом текст содержит ошибки, вы можете сделать вывод, что в этом случае используются неверные данные или код вывода текста содержит ошибки другого рода. При пошаговом выполнении кода в отладчике вы можете изучить каждое изменение переменных и точно определить, когда и каким образом были присвоены неверные значения.
Проверьте свои предположения
Прежде чем исследовать причины возникновения ошибки, проверьте предположения, на основании которых вы ожидаете тот или иной результат. Неявные или неизвестные вам предположения могут помешать выявлению проблемы, даже если вы прямо смотрите на ее причину в отладчике. У вас может быть длинный список возможных предположений! Чтобы проверить их, задайте себе несколько вопросов.
- Используете ли вы нужный API (то есть соответствующие объект, функцию, метод или свойство)? Возможно, используемый вами API работает не так, как вы ожидаете. (После проверки вызова API в отладчике исправление может потребовать поездки в документацию, чтобы определить правильный API.)
- Правильно ли вы используете API? Даже если вы выбрали нужный API, он может использоваться неправильно.
- Нет ли в вашем коде опечаток? Некоторые опечатки, например ошибки в написании имени переменной, могут быть незаметными, особенно при работе с языками, в которых не требуется объявление переменных перед их использованием.
- Вносили ли вы в код изменения, полагая, что они никак не связаны с возникшей проблемой?
- Должны ли объект или переменная содержать определенное значение (или определенный тип значения) и соответствует ли это действительности?
- Известно ли назначение кода? Отлаживать чужой код часто бывает сложнее. Если это не ваш код, возможно, для его эффективной отладки вам потребуется изучить, что он делает.
Совет При написании кода начинайте с небольших и гарантированно работающих фрагментов! (Хороший пример кода полезен здесь.) Иногда проще исправить большой или сложный набор кода, начиная с небольшого фрагмента кода, демонстрирующего основную задачу, которую вы пытаетесь достичь. Затем вы можете последовательно изменять или добавлять код в поисках точки возникновения ошибки.
Подспрошив предположения, вы можете сократить время, необходимое для поиска проблемы в коде. Вы также можете сократить время, необходимое для устранения проблемы.
Используйте режим пошагового выполнения во время отладки для поиска места возникновения проблемы.
Очевидно, что ошибки и неверные результаты можно увидеть только после выполнения кода приложения. Кроме того, работа программы может завершиться неожиданно без каких-либо сообщений.
При запуске приложения в отладчике, который также называется режимом отладки, отладчик активно отслеживает все, что происходит при запуске программы. Кроме того, вы можете в любой точке приостановить работу приложения, исследовать его состояние и пошагово выполнять код в каждой строке, чтобы видеть в деталях, что происходит.
В Visual Studio введите режим отладки с помощью F5 (или > команды меню «Запуск отладки» или кнопки «Начать отладку» на панели инструментов отладки). Если возникает исключение, помощник по исправлению ошибок Visual Studio направит вас к точке его появления и предоставит другую необходимую информацию. См. дополнительные сведения об обработке исключений в коде в разделе Приемы и инструменты отладки.
Если исключение не возникает, возможно, вы имеете некоторое представление о том, где искать проблему в коде. Этот шаг заключается в том, что вы используете точки останова с отладчиком, чтобы дать себе возможность тщательно изучить код. Точки останова — это самая основная и важная функция надежной отладки. Точка останова указывает, в каком месте Visual Studio следует приостановить выполнение, чтобы вы могли проверить значения переменных, работу памяти или последовательность выполнения кода.
Чтобы задать точку останова в Visual Studio, достаточно щелкнуть в левом поле рядом с интересующей вас строкой кода. Также для этого можно поместить указатель мыши в нужную строку и нажать клавишу F9.
Чтобы продемонстрировать это, мы рассмотрим пример кода, который уже содержит несколько ошибок. Здесь мы используем C#, однако функции отладки также применяются для Visual Basic, C++, JavaScript, Python и других поддерживаемых языков. Также предоставлен пример кода для Visual Basic, но снимки экрана приведены для C#.
Создание образца приложения с ошибками
Затем вы создадите приложение с несколькими ошибками.
- Необходимо установить Visual Studio и рабочую нагрузку разработки для классических приложений .NET. Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого. Если необходимо установить рабочую нагрузку, но у вас уже есть Visual Studio, выберите «Сервис >получения инструментов» и «Компоненты». Запускается Visual Studio Installer. Выберите рабочую нагрузку Разработка классических приложений .NET и нажмите Изменить.
- Откройте Visual Studio. На начальном экране выберите Создать проект. Введите консоль в поле поиска, выберите C# или Visual Basic в качестве языка, а затем выберите консольное приложение для .NET. Нажмите кнопку Далее. Введите имя проекта, например ConsoleApp_FirstApp , и нажмите кнопку «Далее«. Выберите рекомендуемую целевую платформу или .NET 8, а затем нажмите кнопку «Создать«. Если вы не видите шаблон проекта консольного приложения для .NET, перейдите в раздел «Сервис >получения инструментов и функций«, который открывает установщик Visual Studio. Выберите рабочую нагрузку Разработка классических приложений .NET и нажмите Изменить. Visual Studio создаст консольный проект и откроет его в Обозревателе решений в области справа.
- Откройте файл Program.cs (или Program.vb) и замените все его содержимое по умолчанию следующим кодом. (Сначала выберите вкладку для нужного языка: C# или Visual Basic.)
using System; using System.Collections.Generic; namespace ConsoleApp_FirstApp < class Program < static void Main(string[] args) < Console.WriteLine("Welcome to Galaxy News!"); IterateThroughList(); Console.ReadKey(); >private static void IterateThroughList() < var theGalaxies = new List< new Galaxy() < Name="Tadpole", MegaLightYears=400, GalaxyType=new GType('S')>, new Galaxy() < Name="Pinwheel", MegaLightYears=25, GalaxyType=new GType('S')>, new Galaxy() < Name="Cartwheel", MegaLightYears=500, GalaxyType=new GType('L')>, new Galaxy() < Name="Small Magellanic Cloud", MegaLightYears=.2, GalaxyType=new GType('I')>, new Galaxy() < Name="Andromeda", MegaLightYears=3, GalaxyType=new GType('S')>, new Galaxy() < Name="Maffei 1", MegaLightYears=11, GalaxyType=new GType('E')>>; foreach (Galaxy theGalaxy in theGalaxies) < Console.WriteLine(theGalaxy.Name + " " + theGalaxy.MegaLightYears + ", " + theGalaxy.GalaxyType); >// Expected Output: // Tadpole 400, Spiral // Pinwheel 25, Spiral // Cartwheel, 500, Lenticular // Small Magellanic Cloud .2, Irregular // Andromeda 3, Spiral // Maffei 1, 11, Elliptical > > public class Galaxy < public string Name < get; set; >public double MegaLightYears < get; set; >public object GalaxyType < get; set; >> public class GType < public GType(char type) < switch(type) < case 'S': MyGType = Type.Spiral; break; case 'E': MyGType = Type.Elliptical; break; case 'l': MyGType = Type.Irregular; break; case 'L': MyGType = Type.Lenticular; break; default: break; >> public object MyGType < get; set; >private enum Type < Spiral, Elliptical, Irregular, Lenticular>> >
Imports System Imports System.Collections.Generic Namespace ConsoleApp_FirstApp Friend Class Program Public Shared Sub Main(ByVal args As String()) Console.WriteLine("Welcome to Galaxy News!") Call IterateThroughList() Console.ReadKey() End Sub Private Shared Sub IterateThroughList() Dim theGalaxies = New List(Of Galaxy) From < New Galaxy() With < .Name = "Tadpole", .MegaLightYears = 400, .GalaxyType = New GType("S"c) >, New Galaxy() With < .Name = "Pinwheel", .MegaLightYears = 25, .GalaxyType = New GType("S"c) >, New Galaxy() With < .Name = "Cartwheel", .MegaLightYears = 500, .GalaxyType = New GType("L"c) >, New Galaxy() With < .Name = "Small Magellanic Cloud", .MegaLightYears = 0.2, .GalaxyType = New GType("I"c) >, New Galaxy() With < .Name = "Andromeda", .MegaLightYears = 3, .GalaxyType = New GType("S"c) >, New Galaxy() With < .Name = "Maffei 1", .MegaLightYears = 11, .GalaxyType = New GType("E"c) >> For Each theGalaxy As Galaxy In theGalaxies Console.WriteLine(theGalaxy.Name & " " & theGalaxy.MegaLightYears & ", " & theGalaxy.GalaxyType) Next End Sub End Class Public Class Galaxy Public Property Name As String Public Property MegaLightYears As Double Public Property GalaxyType As Object End Class Public Class GType Shared Operator &(ByVal left As String, ByVal right As GType) As String Return New String(left & right.ToString()) End Operator Public Sub New(ByVal type As Char) Select Case type Case "S"c MyGType = GType.Type.Spiral Case "E"c MyGType = GType.Type.Elliptical Case "l"c MyGType = GType.Type.Irregular Case "L"c MyGType = GType.Type.Lenticular Case Else End Select End Sub Private _MyGType As String Public Property MyGType As Object Get Return _MyGType End Get Set(ByVal value As Object) _MyGType = value.ToString() End Set End Property Private Enum Type Spiral Elliptical Irregular Lenticular End Enum End Class End Namespace
Этот код выводит список, содержащий название галактики, расстояние до нее, а также тип галактики. При отладке важно учитывать предназначение кода. Ниже показан формат одной строки из списка, который мы хотим отобразить в выводе:
название галактики, расстояние, тип галактики.
Выполнить приложение
Нажмите клавишу F5 или кнопку «Начать отладку» на панели инструментов отладки, расположенной над редактором кода.
По результатам запуска приложения отладчик не демонстрирует никаких исключений. Тем не менее данные, выводимые в окне консоли, не соответствуют ожиданиям. Вот что мы должны были увидеть:
Tadpole 400, Spiral Pinwheel 25, Spiral Cartwheel, 500, Lenticular Small Magellanic Cloud .2, Irregular Andromeda 3, Spiral Maffei 1, Elliptical
Но вместо этого вы увидите следующие выходные данные:
Tadpole 400, ConsoleApp_FirstApp.GType Pinwheel 25, ConsoleApp_FirstApp.GType Cartwheel, 500, ConsoleApp_FirstApp.GType Small Magellanic Cloud .2, ConsoleApp_FirstApp.GType Andromeda 3, ConsoleApp_FirstApp.GType Maffei 1, 11, ConsoleApp_FirstApp.GType
По выходным данным и коду мы видим, что GType — это имя класса, содержащего тип галактики. Но мы пытаемся отобразить сам тип (например, Spiral, то есть спиральная), а не имя класса!
Отладка приложения
- Пока приложение еще работает, вставьте точку останова. Щелкните правой кнопкой мыши рядом с Console.WriteLine методом, чтобы получить контекстное меню и выберите точку останова вставить точку > останова в всплывающем меню.
foreach (Galaxy theGalaxy in theGalaxies)
For Each theGalaxy As Galaxy In theGalaxies Console.WriteLine(theGalaxy.Name & " " & theGalaxy.MegaLightYears & ", " & theGalaxy.GalaxyType) Next
В месте установки точки останова в левом поле появится красный круг.
При возникновении проблемы в выходных данных вы начинаете отладку, просматривая предыдущий код, который задает выходные данные в отладчике.
Примечание. Для отладки кода примера Visual Basic пропустите следующие несколько шагов, пока не будет указано, как нажать кнопку «Перезапустить «.
public object GalaxyType
public GType GalaxyType
Tadpole 400, Spiral Pinwheel 25, Spiral Cartwheel, 500, Lenticular Small Magellanic Cloud .2, Andromeda 3, Spiral Maffei 1, Elliptical
public GType(char type)
Public Sub New(ByVal type As Char)
Здесь задается тип галактики, поэтому нам необходимо изучить эту строку более пристально.
Итоги
Если вы сталкиваетесь с проблемой, воспользуйтесь отладчиком и командами пошагового выполнения, такими как F10 и F11, для поиска области кода, в которой возникают ошибки.
Если выявить проблемную область кода не удается, задайте точку останова в коде, который выполняется перед возникновением ошибки, после чего используйте команды пошагового выполнения, пока проблема не проявится. Также вы можете использовать точки трассировки для вывода сообщений в окно вывода. Анализируя сообщения, которые выводятся в окно или отсутствуют в нем, нередко можно изолировать область кода, где возникает проблема. Для дальнейшего сужения области поиска этот процесс может потребоваться повторить несколько раз.
Выявив проблемную область кода, используйте отладчик для ее детального анализа. Чтобы определить причину возникновения проблемы, проверьте код во время выполнения приложения в отладчике.
- Проверьте переменные и убедитесь, что они содержат значения того типа, который вы ожидаете. Если переменная содержит недопустимое значение, найдите, где оно было задано. Для этого может потребоваться перезапустить отладчик, проверить стек вызовов или выполнить одновременно оба этих действия.
- Проверьте, выполняет ли ваше приложение код, который вы ожидаете. (Так, в примере приложения должна была выполняться инструкция switch , задающая тип галактики Irregular, однако нужный код был пропущен из-за опечатки.)
Отладчик представляет собой эффективное средства для выявления ошибок. Средство отладки может искать ошибки вместо вас в том случае, если ему известно предназначение кода. Для этого вы должны указать предназначение. Этого можно добиться с помощью модульных тестов.
Следующие шаги
Из этой статьи вы узнали общие принципы отладки приложений. Теперь вы можете приступить к изучению других возможностей отладчика.
Что такое отладка?
Область применения:Visual Studio Visual Studio для Mac Visual Studio Code
Отладчик Visual Studio — очень эффективное средство. Прежде чем приступать к его использованию, следует ознакомиться с базовыми терминами, такими как отладчик, отладка и режим отладки. Когда позднее мы будем вести речь о поиске и устранении ошибок, мы будем иметь в виду то же самое.
Отладчик и отладка
Термин отладка может иметь разные значения, но в первую очередь он означает устранение ошибок в коде. Делается это по-разному. Например, отладка может выполняться путем проверки кода на наличие опечаток или с помощью анализатора кода. Код можно отлаживать с помощью профилировщика производительности. Кроме того, отладка может производиться посредством отладчика.
Отладчик — это узкоспециализированное средство разработки, которое присоединяется к работающему приложению и позволяет проверять код. В документации по отладке для Visual Studio именно это обычно подразумевается под отладкой.
Режим отладки и выполнение приложения
При первом запуске приложения в Visual Studio его можно запустить, нажав зеленую кнопку со стрелкой на панели инструментов (или F5). По умолчанию в раскрывающемся списке слева отображается элемент Отладка. Если вы не имеете опыта работы с Visual Studio, может показаться, что отладка приложения — это практически то же самое, что его запуск. На самом деле эти задачи хоть и связаны, но коренным образом различаются.
Значение Отладка соответствует конфигурации отладки. Когда вы запускаете приложение (нажимая зеленую стрелку или клавишу F5) в конфигурации отладки, оно запускается в режиме отладки. Это означает, что приложение запускается с присоединенным отладчиком. В результате вы получаете полный набор функций отладки, которые можно использовать для поиска ошибок в приложении.
Если у вас открыт проект, выберите в раскрывающемся списке Отладка элемент Выпуск.
При выборе этого параметра конфигурация отладки для проекта меняется на конфигурацию выпуска. Проекты Visual Studio имеют отдельные конфигурации выпуска и отладки для вашей программы. Производится построение отладочной версии для отладки и версии выпуска для окончательного выпуска программы. Сборка выпуска оптимизирована для обеспечения максимальной производительности, а отладочная сборка лучше подходит для отладки.
Когда следует использовать отладчик
Отладчик — важнейший инструмент для поиска и устранения ошибок в приложениях. Однако большое значение имеет контекст. Важно использовать все средства, имеющиеся в вашем распоряжении, чтобы быстро устранять ошибки. Зачастую лучшим «средством» являются правильные методики написания кода. Зная, когда лучше использовать отладчик, а когда — другие средства, вы также сможете более эффективно использовать отладчик.
Следующие шаги
Из этой статьи вы узнали общие принципы отладки приложений. Теперь вы можете приступить к знакомству с процессом отладки в Visual Studio и написанию кода с меньшим количеством ошибок. В следующих статьях приводятся примеры кода на C#, но основные понятия применимы ко всем языкам, поддерживаемым средой Visual Studio.
Краткое руководство. Отладка кода C++ с помощью отладчика Visual Studio
Область применения:Visual Studio Visual Studio для Mac Visual Studio Code
Отладчик Visual Studio реализует множество эффективных функций для отладки приложений. В этой статье вы ознакомитесь с некоторыми основными возможностями.
Создание нового проекта
- Откройте Visual Studio и создайте проект. Нажмите клавишу ESC, чтобы закрыть окно запуска. Нажмите CTRL+Q, чтобы открыть поле поиска, введите c++, выберите Шаблоны и затем Create new Console App project (Создание проекта консольного приложения). В появившемся диалоговом окне выберите Создать. Если шаблон проекта Консольное приложение Windows отсутствует, перейдите в меню Инструменты>Получить инструменты и компоненты. , после чего запустится Visual Studio Installer. Запускается Visual Studio Installer. Выберите рабочую нагрузку Разработка классических приложений на C++, а затем нажмите Изменить. Visual Studio создаст проект.
- В файле MyDbgApp.cpp замените следующий код
int main()
следующим кодом (не удаляйте #include «stdafx.h» ):
#include #include using namespace std; void doWork() < list c1; c1.push_back(10); c1.push_back(20); const list c2 = c1; const int &i = c2.front(); const int &j = c2.front(); cout int main()
Установка точки останова
Точка останова указывает, где Visual Studio следует приостановить выполнение кода, чтобы вы могли проверить значения переменных или поведение памяти, либо выполнение ветви кода. Эта возможность чаще всего используется при отладке.
- Чтобы задать точку останова, щелкните в области слева от вызова функции doWork (или выберите строку кода и нажмите клавишу F9).
- Нажмите клавишу F5 (или выберите Отладка > Начать отладку). Отладчик приостановит выполнение в заданной точке останова. Инструкция, в которой отладчик приостановил выполнение приложения, обозначается желтой стрелкой. Строка, содержащая вызов функции doWork , пока еще не выполнена.
Совет При наличии точки останова в цикле или рекурсии либо большого числа точек останова, которые вы часто будете просматривать пошагово, используйте условную точку останова, которая позволяет приостанавливать код только при выполнении определенных условий. Использование условных точек останова позволяет сэкономить время и упростить отладку проблем, которые сложно воспроизвести.
Навигация по коду
Чтобы продолжить работу отладчика, можно использовать различные команды. Здесь описываются полезные новые команды для навигации по коду, доступные с версии Visual Studio 2017.
При приостановке в точке останова наведите указатель мыши на инструкцию c1.push_back(20) , пока не появится зеленая кнопка"Запустить", а затем нажмите кнопку "Выполнить", чтобы нажать кнопку.
Выполнение приложения продолжится путем вызова doWork и будет приостановлено в той строке, в которой вы нажмете эту кнопку.
В процессе пошагового выполнения кода обычно используются клавиши F10 и F11. Более подробные инструкции см. в статье Знакомство с отладчиком Visual Studio.
Проверка переменных в подсказке по данным
- В текущей строке кода, отмеченной желтым указателем выполнения, наведите указатель мыши на объект c1 , чтобы просмотреть подсказку по данным. Подсказка по данным содержит текущее значение переменной c1 и позволяет проверить ее свойства. Если во время отладки отображается значение, которое вы не ожидали увидеть, возможно, в предыдущей или вызывающей строке кода имеется ошибка.
- Разверните подсказку по данным, чтобы просмотреть текущие значения свойств объекта c1 .
- Чтобы закрепить подсказку по данным и иметь возможность постоянно просматривать значение переменной c1 во время выполнения, щелкните небольшой значок булавки. (При необходимости вы можете переместить закрепленную подсказку по данным в удобное положение.)
Изменение кода и продолжение отладки
Вы можете сделать это во время сеанса отладки, если вам потребуется внести изменения в код.
- Щелкните второй экземпляр c2.front() и измените c2.front() на c2.back() .
- Нажмите клавишу F10 (или выберите команду Отладка > Шаг с обходом) несколько раз, чтобы пройти вперед и выполнить измененный код. При нажатии клавиши F10 отладчик каждый раз переходит вперед на одну инструкцию, однако при этом минует функции, не заходя в них (пропускаемый код в таком случае по-прежнему выполняется).
Дополнительные сведения об этом режиме и его ограничениях см. в статье Изменить и продолжить.
Следующие шаги
В этом руководстве вы узнали, как запускать отладчик, осуществлять пошаговое выполнение кода и проверять переменные. Возможно, вы захотите получить более полное представление о функциях отладчика, а также воспользоваться ссылками на дополнительные сведения.
Отладка с помощью JIT-отладчика в Visual Studio
Область применения:Visual Studio Visual Studio для Mac Visual Studio Code
JIT-отладка автоматически запускает Visual Studio при возникновении ошибок или сбоев в приложении, запущенном вне Visual Studio. С помощью JIT-отладки можно тестировать приложения за пределами Visual Studio и открыть Visual Studio, чтобы начать отладку в случае проблемы.
JIT-отладка работает для классических приложений Windows. Он не работает для универсальных приложений Windows или для управляемого кода, размещенного в собственном приложении, например визуализаторов.
Если вы просто хотите запретить отображение диалогового окна JIT-отладчика, но у вас не установлена Visual Studio, см. раздел Отключение JIT-отладчика. Если набор средств Visual Studio был ранее установлен, но теперь его нет, придется отключить JIT-отладку через реестр Windows.
Включение или отключение отладки JIT в Visual Studio
JIT-отладку можно настроить в диалоговом окне Visual Studio Сервис>Параметры (или Отладка>Параметры).
Чтобы включить или отключить JIT-отладку, необходимо запустить Visual Studio от имени администратора. Включение или отключение JIT-отладки устанавливает раздел реестра. Для его изменения требуются права администратора. Откройте Visual Studio с правами администратора, щелкнув приложение Visual Studio правой кнопкой мыши и выбрав Запуск от имени администратора.
Включение или отключение JIT–отладки
-
В меню Сервис или Отладка выберите Параметры>Отладка>JIT.
Примечание. Если параметр меню JIT не отображается, убедитесь, что отладчик JIT установлен с помощью установщика Visual Studio.
Если вы включили JIT-отладчик, но он не открывается при сбоях или ошибках приложения, см. раздел Устранение неполадок с JIT-отладкой.
Отключение JIT-отладки из реестра Windows
Отладка JIT все еще может быть включена, даже если Visual Studio больше не установлена на компьютере. Если Visual Studio больше не установлена, JIT-отладку можно отключить, отредактировав реестр Windows.
Отключение JIT-отладки путем редактирования реестра
- В меню Windows Пуск запустите редактор реестра (regedit.exe).
- В окне редактора реестра найдите и удалите следующие записи реестра, если они существуют:
- HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
- HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
Будьте внимательны, чтобы не удалить или не изменить другие разделы реестра.
Включение JIT-отладки для приложений Windows Forms
По умолчанию в приложениях Windows Forms есть обработчик исключений верхнего уровня, который позволяет приложению продолжить работу, если оно может быть восстановлено. Если приложение Windows Forms выдает необработанное исключение, отображается следующее диалоговое окно:
Чтобы включить JIT-отладку вместо стандартной обработки ошибок Windows Forms, добавьте следующие параметры.
-
В разделе system.windows.forms файла machine.config или .exe.config установите для параметра jitDebugging значение true :
[assembly:System::Diagnostics::DebuggableAttribute(true, true)];
Использование JIT-отладки
В этом примере рассматривается JIT-отладка, когда приложение выдает ошибку.
- Для выполнения инструкций необходимо установить Visual Studio. Если у вас нет Visual Studio, вы можете скачать бесплатный выпуск Visual Studio Community.
- Убедитесь, что JIT-отладка включена в разделе Сервис>Параметры>Отладка>JIT.
В этом примере вы создаете консольное приложение C# в Visual Studio, которое создает исключение NullReferenceException.
- В Visual Studio создайте консольное приложение C# (Файл>Создать>Проект>Visual C#>Консольное приложение) с именем ThrowsNullException. Дополнительные сведения о создании проектов в Visual Studio см. в пошаговом руководстве. Создание простого приложения.
- Когда проект откроется в Visual Studio, откройте файл Program.cs. Замените метод Main() следующим кодом, который выводит строку на консоль, а затем создает исключение NullReferenceException:
static void Main(string[] args)
- Выберите конфигурацию Отладка для полной отладки.
- Если выбрана конфигурация Выпуск, необходимо отключить функцию Только мой код. В разделе Сервис>Параметры>Отладка снимите флажок Включить только мой код.
Дополнительные сведения о конфигурациях сборки см. в разделе Общие сведения о конфигурациях сборки.
Теперь можно начать отладку. Если вы выполняете отладку реального приложения, необходимо выяснить, почему код вызывает исключение.
Если приложение содержит ненадежный код, появляется диалоговое окно предупреждения системы безопасности, позволяющее решить, следует ли продолжить отладку. Перед продолжением отладки решите, доверяете ли вы данному коду. Этот код написан вами самостоятельно? Если приложение выполняется на удаленном компьютере, узнаете ли вы имя процесса? Если приложение выполняется локально, учитывайте возможность выполнения такого вредоносного кода на вашем компьютере. Если вы решили, что код заслуживает доверия, нажмите ОК. В противном случае выберите Отмена.
Устранение неполадок с отладкой JIT
Если отладка JIT не запускается при сбое приложения, даже если она включена в Visual Studio:
- Отчеты об ошибках Windows могут взять на себя обработку ошибок на компьютере. Чтобы устранить эту проблему, используйте редактор реестра, чтобы добавить значение DWORDОтключено с параметром Данные значения, равным 1, для следующих разделов реестра:
- HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting
- (Для компьютеров с 32-разрядной версией ОС) HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
Дополнительные сведения см. в разделе Параметры .WER.
- HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
- (Для компьютеров с 32-разрядной версией ОС) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
Во время JIT-отладки могут отображаться следующие сообщения об ошибках.
- Не удалось подключиться к аварийному процессу. Указанная программа не является программой Windows или MS–DOS. Отладчик попытался подключиться к процессу, выполняющемуся под именем другого пользователя. Чтобы обойти эту проблему, запустите Visual Studio, откройте диалоговое окно Отладка>Присоединение к процессу (или нажмите сочетание клавиш CTRL + ALT + P) и найдите процесс, для которого требуется выполнить отладку, в списке Доступные процессы. Если имя процесса не известно, найдите идентификатор процесса в диалоговом окне JIT-отладчика Visual Studio. Выберите процесс в списке Доступные процессы и щелкните Присоединить. Выберите Нет, чтобы закрыть диалоговое окно JIT-отладчика.
- Не удалось запустить отладчик, так как пользователь не вошел в систему. Пользователь не вошел в консоль, поэтому нет сеанса пользователя для отображения диалогового окна отладки JIT. Для решения этой проблемы необходимо войти в компьютер.
- Класс не зарегистрирован. Отладчик пытался создать класс COM, который не зарегистрирован, вероятно, из-за проблемы с установкой. Чтобы решить эту проблему, используйте Visual Studio Installer для переустановки или исправления установки Visual Studio.
См. также
- Безопасность отладчика
- Первое знакомство с отладчиком
- "Параметры", "Отладка", диалоговое окно "JIT-отладка"
- Предупреждение безопасности. Присоединение к процессу, который принадлежит пользователю, не являющемуся доверенным, может быть опасным. Если приведенные ниже сведения выглядят подозрительными или не уверены, не присоединяйтесь к этому процессу.