Как запустить дебаг в visual studio
Перейти к содержимому

Как запустить дебаг в visual studio

  • автор:

Отладка для абсолютных начинающих

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Независимо от обстоятельств код, создаваемый разработчиками программного обеспечения, далеко не всегда работает так, как задумано. В некоторых случаях все идет совершенно не по плану! Когда происходит непредвиденное, следующая задача заключается в том, чтобы выяснить, почему, и хотя мы можем просто заманчиво просто следить за нашим кодом в течение нескольких часов, проще и эффективнее использовать средство отладки или отладчик.

К сожалению, отладчик не является той волшебной палочкой, по мановению которой будут выявлены абсолютно все проблемы в коде. Процесс отладки подразумевает пошаговое выполнение кода в средстве отладки (например, в Visual Studio) в поисках точки, в которой вы допустили ошибку при написании программы. Таким образом вы узнаете, какие исправления нужно внести в код. При этом средства отладки часто позволяют вносить временные изменения, чтобы продолжить работу с программой.

Эффективное использование отладчика также требует определенных навыков, которые вырабатываются только с практикой, однако умение работать с ним является основополагающим требованием к любому разработчику программного обеспечения. В этой статье мы представим основные принципы отладки и некоторые начальные рекомендации.

Проанализируйте проблему, задавая себе правильные вопросы

Это поможет вам выяснить, в чем состоит проблема, прежде чем приступать к ее решению. Мы полагаем, что вы уже сталкивались с проблемами в коде, иначе вряд ли читали бы сейчас эту статью в поисках советов по его отладке! Итак, прежде чем начать отладку, проанализируйте проблему, которую вы пытаетесь решить:

  • Что именно должен был выполнить код?
  • Что произошло на самом деле? Если при запуске приложения возникает ошибка (исключение), это может быть хорошо! Исключение возникает в том случае, если при выполнении кода происходит непредвиденное событие (как правило, это ошибка какого-либо рода). С помощью средства отладки вы можете перейти точно к тому месту в коде, где возникло исключение, и исследовать возможные способы исправления ситуации. Если произошло что-то еще, каковы признаки проблемы? Есть ли у вас предположения относительно того, в каком месте кода возникла проблема? Например, если код должен выводить какой-то текст, но при этом текст содержит ошибки, вы можете сделать вывод, что в этом случае используются неверные данные или код вывода текста содержит ошибки другого рода. При пошаговом выполнении кода в отладчике вы можете изучить каждое изменение переменных и точно определить, когда и каким образом были присвоены неверные значения.

Проверьте свои предположения

Прежде чем исследовать причины возникновения ошибки, проверьте предположения, на основании которых вы ожидаете тот или иной результат. Неявные или неизвестные вам предположения могут помешать выявлению проблемы, даже если вы прямо смотрите на ее причину в отладчике. У вас может быть длинный список возможных предположений! Чтобы проверить их, задайте себе несколько вопросов.

  • Используете ли вы нужный API (то есть соответствующие объект, функцию, метод или свойство)? Возможно, используемый вами API работает не так, как вы ожидаете. (После проверки вызова API в отладчике исправление может потребовать поездки в документацию, чтобы определить правильный API.)
  • Правильно ли вы используете API? Даже если вы выбрали нужный API, он может использоваться неправильно.
  • Нет ли в вашем коде опечаток? Некоторые опечатки, например ошибки в написании имени переменной, могут быть незаметными, особенно при работе с языками, в которых не требуется объявление переменных перед их использованием.
  • Вносили ли вы в код изменения, полагая, что они никак не связаны с возникшей проблемой?
  • Должны ли объект или переменная содержать определенное значение (или определенный тип значения) и соответствует ли это действительности?
  • Известно ли назначение кода? Отлаживать чужой код часто бывает сложнее. Если это не ваш код, возможно, для его эффективной отладки вам потребуется изучить, что он делает.

Совет При написании кода начинайте с небольших и гарантированно работающих фрагментов! (Хороший пример кода полезен здесь.) Иногда проще исправить большой или сложный набор кода, начиная с небольшого фрагмента кода, демонстрирующего основную задачу, которую вы пытаетесь достичь. Затем вы можете последовательно изменять или добавлять код в поисках точки возникновения ошибки.

Подспрошив предположения, вы можете сократить время, необходимое для поиска проблемы в коде. Вы также можете сократить время, необходимое для устранения проблемы.

Используйте режим пошагового выполнения во время отладки для поиска места возникновения проблемы.

Очевидно, что ошибки и неверные результаты можно увидеть только после выполнения кода приложения. Кроме того, работа программы может завершиться неожиданно без каких-либо сообщений.

При запуске приложения в отладчике, который также называется режимом отладки, отладчик активно отслеживает все, что происходит при запуске программы. Кроме того, вы можете в любой точке приостановить работу приложения, исследовать его состояние и пошагово выполнять код в каждой строке, чтобы видеть в деталях, что происходит.

Icon showing Start Debugging button.

В Visual Studio введите режим отладки с помощью F5 (или > команды меню «Запуск отладки» или кнопки «Начать отладку» на панели инструментов отладки). Если возникает исключение, помощник по исправлению ошибок Visual Studio направит вас к точке его появления и предоставит другую необходимую информацию. См. дополнительные сведения об обработке исключений в коде в разделе Приемы и инструменты отладки.

Если исключение не возникает, возможно, вы имеете некоторое представление о том, где искать проблему в коде. Этот шаг заключается в том, что вы используете точки останова с отладчиком, чтобы дать себе возможность тщательно изучить код. Точки останова — это самая основная и важная функция надежной отладки. Точка останова указывает, в каком месте Visual Studio следует приостановить выполнение, чтобы вы могли проверить значения переменных, работу памяти или последовательность выполнения кода.

Чтобы задать точку останова в Visual Studio, достаточно щелкнуть в левом поле рядом с интересующей вас строкой кода. Также для этого можно поместить указатель мыши в нужную строку и нажать клавишу F9.

Чтобы продемонстрировать это, мы рассмотрим пример кода, который уже содержит несколько ошибок. Здесь мы используем C#, однако функции отладки также применяются для Visual Basic, C++, JavaScript, Python и других поддерживаемых языков. Также предоставлен пример кода для Visual Basic, но снимки экрана приведены для C#.

Создание образца приложения с ошибками

Затем вы создадите приложение с несколькими ошибками.

  1. Необходимо установить Visual Studio и рабочую нагрузку разработки для классических приложений .NET. Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого. Если необходимо установить рабочую нагрузку, но у вас уже есть Visual Studio, выберите «Сервис >получения инструментов» и «Компоненты». Запускается Visual Studio Installer. Выберите рабочую нагрузку Разработка классических приложений .NET и нажмите Изменить.
  2. Откройте Visual Studio. На начальном экране выберите Создать проект. Введите консоль в поле поиска, выберите C# или Visual Basic в качестве языка, а затем выберите консольное приложение для .NET. Нажмите кнопку Далее. Введите имя проекта, например ConsoleApp_FirstApp , и нажмите кнопку «Далее«. Выберите рекомендуемую целевую платформу или .NET 8, а затем нажмите кнопку «Создать«. Если вы не видите шаблон проекта консольного приложения для .NET, перейдите в раздел «Сервис >получения инструментов и функций«, который открывает установщик Visual Studio. Выберите рабочую нагрузку Разработка классических приложений .NET и нажмите Изменить. Visual Studio создаст консольный проект и откроет его в Обозревателе решений в области справа.
  3. Откройте файл 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 

Этот код выводит список, содержащий название галактики, расстояние до нее, а также тип галактики. При отладке важно учитывать предназначение кода. Ниже показан формат одной строки из списка, который мы хотим отобразить в выводе:

название галактики, расстояние, тип галактики.

Выполнить приложение

Icon showing Start Debugging button.

Нажмите клавишу 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, то есть спиральная), а не имя класса!

Отладка приложения

  1. Пока приложение еще работает, вставьте точку останова. Щелкните правой кнопкой мыши рядом с Console.WriteLine методом, чтобы получить контекстное меню и выберите точку останова вставить точку > останова в всплывающем меню.
foreach (Galaxy theGalaxy in theGalaxies)
For Each theGalaxy As Galaxy In theGalaxies Console.WriteLine(theGalaxy.Name & " " & theGalaxy.MegaLightYears & ", " & theGalaxy.GalaxyType) Next 

В месте установки точки останова в левом поле появится красный круг.

При возникновении проблемы в выходных данных вы начинаете отладку, просматривая предыдущий код, который задает выходные данные в отладчике.

  • Нажмите кнопку «Перезапустить Icon showing RestartApp button in Debug toolbar. » на панели инструментов отладки (CTRL + SHIFT +F5). Выполнение приложения приостановится в заданной точке останова. Место приостановки отладчика будет выделено желтым цветом (при этом желтая строка кода еще не выполнена).
  • Наведите указатель мыши на переменную GalaxyType справа. После этого разверните theGalaxy.GalaxyType слева от значка гаечного ключа. Как вы можете видеть, GalaxyType содержит свойство MyGType , которому присваивается значение Spiral . Screenshot of the Visual Studio Debugger with a line of code in yellow and a menu open below the Galaxy GalaxyType property.Изначально вы ожидаете, что в окно консоли будет выведено именно значение Spiral. Поэтому вы можете получить доступ к значению в этом коде при запуске приложения. В этом сценарии мы используем неверный API-интерфейс. Давайте посмотрим, можно ли исправить это при выполнении кода в отладчике.
  • Во время отладки этого же кода установите указатель мыши в конец элемента theGalaxy.GalaxyType и измените его на theGalaxy.GalaxyType.MyGType . Хотя вы можете внести изменения, редактор кода показывает ошибку, указывающую, что он не может скомпилировать этот код. (В Visual Basic ошибка не отображается, и этот раздел кода работает.)
  • Нажмите клавишу F11 (Шаг отладки>или кнопка «Шаг в шаг» на панели инструментов отладки), чтобы выполнить текущую строку кода. При нажатии клавиши F11 отладчик переходит на одну инструкцию вперед и выполняет соответствующий код. F10 (Step Over) — это аналогичная команда, и оба полезны при обучении использованию отладчика. Откроется диалоговое окно «Изменить и продолжить», указывающее, что изменения не могут быть скомпилированы. Screenshot of the Visual Studio Debugger with a line of code highlighted in red and a message box with the Edit option selected.

    Icon showing Restart app button in Debug toolbar.

    Примечание. Для отладки кода примера Visual Basic пропустите следующие несколько шагов, пока не будет указано, как нажать кнопку «Перезапустить «.

    Screenshot of the Visual Studio Debugger with a line of code highlighted in red and an Error List window with two errors listed.

  • Выберите «Изменить» в окне сообщения «Изменить и продолжить«. Сообщение об ошибке будет выведено в окне Список ошибок. Эта ошибка указывает, что ‘object’ не содержит определение для MyGType . Хотя мы задаем каждую галактику как объект типа GType (имеющий свойство MyGType ), отладчик не считает theGalaxy объектом типа GType . Почему? В этом случае необходимо проверить код, который задает тип галактики. Вы увидите, что класс GType содержит свойство MyGType , однако все же что-то работает не так. Разгадка кроется в сообщении об ошибке для object . Интерпретатор языка воспринимает его как объект object вместо ожидаемого типа GType .
  • Анализируя код, в котором задается тип галактики, вы можете увидеть, что свойство GalaxyType класса Galaxy задается как object вместо GType .

    public object GalaxyType
    public GType GalaxyType

    Icon showing Restart app button in Debug toolbar.

  • Нажмите кнопку «Перезапустить » на панели инструментов отладки (CTRL + SHIFT +F5), чтобы перекомпилировать код и перезапустить. Когда отладчик приостановит выполнение на строке Console.WriteLine , вы можете навести указатель мыши на theGalaxy.GalaxyType.MyGType и убедиться, что значение задано правильно.
  • Удалите точку останова, щелкнув ее кружок в левом поле (также для этого можно выбрать команду Точка останова>Удалить точку останова). После этого нажмите клавишу F5 для продолжения. Приложение запускается и отображает выходные данные. Это выглядит хорошо, но вы заметили одно. Вы ожидали, что небольшая галактика Magellanic Cloud будет отображаться как нерегулярная галактика в выходных данных консоли, но она не показывает вообще типа галактики.

    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) 

    Здесь задается тип галактики, поэтому нам необходимо изучить эту строку более пристально.

  • Нажмите кнопку «ПерезапуститьIcon showing Restart app button in Debug toolbar. » на панели инструментов отладки (CTRL + SHIFT +F5), чтобы перезапустить. Отладчик приостановит работу в строке кода, где вы задали точку останова.
  • Наведите указатель мыши на переменную type . Отображается значение S (после кода символа). Вас интересует значение I , поскольку эта галактика должна иметь тип Irregular (неправильная).
  • Нажмите клавишу F5 и снова наведите указатель мыши на переменную type . Повторяйте этот шаг, пока в переменной type не появится значение I . Screenshot of the Visual Studio Debugger with a line of code in yellow and a window with the type variable value of 73 I.
  • Теперь нажмите клавишу F11 (шаг отладки>).
  • Нажимайте клавишу F11 до тех пор, пока вы не остановитесь в строке кода с инструкцией switch для значения «I» (инструкция Select для Visual Basic). Здесь вы увидите очевидную ошибку, связанную с опечаткой. Вы ожидали, что код будет выполнен дальше до места, где для MyGType задается тип галактики Irregular, однако вместо этого отладчик полностью пропускает этот код и приостанавливает работу в разделе default инструкции switch (инструкция Else для Visual Basic). Screenshot showing the typo error.Взглянув на код, вы заметите опечатку в инструкции case ‘l’ . Оно должно иметь значение case ‘I’ .
  • Выберите в коде и case ‘l’ замените его case ‘I’ на .
  • Удалите точку останова и нажмите кнопку «Перезапустить «, чтобы перезапустить приложение. Теперь все ошибки исправлены и приложение выдает ожидаемые результаты. Нажмите любую клавишу, чтобы завершить работу приложения.
  • Итоги

    Если вы сталкиваетесь с проблемой, воспользуйтесь отладчиком и командами пошагового выполнения, такими как F10 и F11, для поиска области кода, в которой возникают ошибки.

    Если выявить проблемную область кода не удается, задайте точку останова в коде, который выполняется перед возникновением ошибки, после чего используйте команды пошагового выполнения, пока проблема не проявится. Также вы можете использовать точки трассировки для вывода сообщений в окно вывода. Анализируя сообщения, которые выводятся в окно или отсутствуют в нем, нередко можно изолировать область кода, где возникает проблема. Для дальнейшего сужения области поиска этот процесс может потребоваться повторить несколько раз.

    Выявив проблемную область кода, используйте отладчик для ее детального анализа. Чтобы определить причину возникновения проблемы, проверьте код во время выполнения приложения в отладчике.

    • Проверьте переменные и убедитесь, что они содержат значения того типа, который вы ожидаете. Если переменная содержит недопустимое значение, найдите, где оно было задано. Для этого может потребоваться перезапустить отладчик, проверить стек вызовов или выполнить одновременно оба этих действия.
    • Проверьте, выполняет ли ваше приложение код, который вы ожидаете. (Так, в примере приложения должна была выполняться инструкция switch , задающая тип галактики Irregular, однако нужный код был пропущен из-за опечатки.)

    Отладчик представляет собой эффективное средства для выявления ошибок. Средство отладки может искать ошибки вместо вас в том случае, если ему известно предназначение кода. Для этого вы должны указать предназначение. Этого можно добиться с помощью модульных тестов.

    Следующие шаги

    Из этой статьи вы узнали общие принципы отладки приложений. Теперь вы можете приступить к изучению других возможностей отладчика.

    Что такое отладка?

    Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

    Отладчик Visual Studio — очень эффективное средство. Прежде чем приступать к его использованию, следует ознакомиться с базовыми терминами, такими как отладчик, отладка и режим отладки. Когда позднее мы будем вести речь о поиске и устранении ошибок, мы будем иметь в виду то же самое.

    Отладчик и отладка

    Термин отладка может иметь разные значения, но в первую очередь он означает устранение ошибок в коде. Делается это по-разному. Например, отладка может выполняться путем проверки кода на наличие опечаток или с помощью анализатора кода. Код можно отлаживать с помощью профилировщика производительности. Кроме того, отладка может производиться посредством отладчика.

    Отладчик — это узкоспециализированное средство разработки, которое присоединяется к работающему приложению и позволяет проверять код. В документации по отладке для Visual Studio именно это обычно подразумевается под отладкой.

    Режим отладки и выполнение приложения

    Start Debugging

    При первом запуске приложения в Visual Studio его можно запустить, нажав зеленую кнопку со стрелкой на панели инструментов (или F5). По умолчанию в раскрывающемся списке слева отображается элемент Отладка. Если вы не имеете опыта работы с Visual Studio, может показаться, что отладка приложения — это практически то же самое, что его запуск. На самом деле эти задачи хоть и связаны, но коренным образом различаются.

    Select a Debug build

    Значение Отладка соответствует конфигурации отладки. Когда вы запускаете приложение (нажимая зеленую стрелку или клавишу F5) в конфигурации отладки, оно запускается в режиме отладки. Это означает, что приложение запускается с присоединенным отладчиком. В результате вы получаете полный набор функций отладки, которые можно использовать для поиска ошибок в приложении.

    Если у вас открыт проект, выберите в раскрывающемся списке Отладка элемент Выпуск.

    Select a Release build

    При выборе этого параметра конфигурация отладки для проекта меняется на конфигурацию выпуска. Проекты Visual Studio имеют отдельные конфигурации выпуска и отладки для вашей программы. Производится построение отладочной версии для отладки и версии выпуска для окончательного выпуска программы. Сборка выпуска оптимизирована для обеспечения максимальной производительности, а отладочная сборка лучше подходит для отладки.

    Когда следует использовать отладчик

    Отладчик — важнейший инструмент для поиска и устранения ошибок в приложениях. Однако большое значение имеет контекст. Важно использовать все средства, имеющиеся в вашем распоряжении, чтобы быстро устранять ошибки. Зачастую лучшим «средством» являются правильные методики написания кода. Зная, когда лучше использовать отладчик, а когда — другие средства, вы также сможете более эффективно использовать отладчик.

    Следующие шаги

    Из этой статьи вы узнали общие принципы отладки приложений. Теперь вы можете приступить к знакомству с процессом отладки в Visual Studio и написанию кода с меньшим количеством ошибок. В следующих статьях приводятся примеры кода на C#, но основные понятия применимы ко всем языкам, поддерживаемым средой Visual Studio.

    Краткое руководство. Отладка кода C++ с помощью отладчика Visual Studio

    Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

    Отладчик Visual Studio реализует множество эффективных функций для отладки приложений. В этой статье вы ознакомитесь с некоторыми основными возможностями.

    Создание нового проекта

    1. Откройте Visual Studio и создайте проект. Нажмите клавишу ESC, чтобы закрыть окно запуска. Нажмите CTRL+Q, чтобы открыть поле поиска, введите c++, выберите Шаблоны и затем Create new Console App project (Создание проекта консольного приложения). В появившемся диалоговом окне выберите Создать. Если шаблон проекта Консольное приложение Windows отсутствует, перейдите в меню Инструменты>Получить инструменты и компоненты. , после чего запустится Visual Studio Installer. Запускается Visual Studio Installer. Выберите рабочую нагрузку Разработка классических приложений на C++, а затем нажмите Изменить. Visual Studio создаст проект.
    2. В файле 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 следует приостановить выполнение кода, чтобы вы могли проверить значения переменных или поведение памяти, либо выполнение ветви кода. Эта возможность чаще всего используется при отладке.

    1. Чтобы задать точку останова, щелкните в области слева от вызова функции doWork (или выберите строку кода и нажмите клавишу F9). Set a breakpoint
    2. Нажмите клавишу F5 (или выберите Отладка > Начать отладку). Hit a breakpointОтладчик приостановит выполнение в заданной точке останова. Инструкция, в которой отладчик приостановил выполнение приложения, обозначается желтой стрелкой. Строка, содержащая вызов функции doWork , пока еще не выполнена.

    Совет При наличии точки останова в цикле или рекурсии либо большого числа точек останова, которые вы часто будете просматривать пошагово, используйте условную точку останова, которая позволяет приостанавливать код только при выполнении определенных условий. Использование условных точек останова позволяет сэкономить время и упростить отладку проблем, которые сложно воспроизвести.

    Навигация по коду

    Чтобы продолжить работу отладчика, можно использовать различные команды. Здесь описываются полезные новые команды для навигации по коду, доступные с версии Visual Studio 2017.

    Run to Click

    При приостановке в точке останова наведите указатель мыши на инструкцию c1.push_back(20) , пока не появится зеленая кнопка"Запустить", а затем нажмите кнопку "Выполнить", чтобы нажать кнопку.

    Run to click

    Выполнение приложения продолжится путем вызова doWork и будет приостановлено в той строке, в которой вы нажмете эту кнопку.

    В процессе пошагового выполнения кода обычно используются клавиши F10 и F11. Более подробные инструкции см. в статье Знакомство с отладчиком Visual Studio.

    Проверка переменных в подсказке по данным

    View a datatip

    1. В текущей строке кода, отмеченной желтым указателем выполнения, наведите указатель мыши на объект c1 , чтобы просмотреть подсказку по данным. Подсказка по данным содержит текущее значение переменной c1 и позволяет проверить ее свойства. Если во время отладки отображается значение, которое вы не ожидали увидеть, возможно, в предыдущей или вызывающей строке кода имеется ошибка.
    2. Разверните подсказку по данным, чтобы просмотреть текущие значения свойств объекта c1 .
    3. Чтобы закрепить подсказку по данным и иметь возможность постоянно просматривать значение переменной c1 во время выполнения, щелкните небольшой значок булавки. (При необходимости вы можете переместить закрепленную подсказку по данным в удобное положение.)

    Изменение кода и продолжение отладки

    Вы можете сделать это во время сеанса отладки, если вам потребуется внести изменения в код.

    1. Щелкните второй экземпляр c2.front() и измените c2.front() на c2.back() .
    2. Нажмите клавишу F10 (или выберите команду Отладка > Шаг с обходом) несколько раз, чтобы пройти вперед и выполнить измененный код. При нажатии клавиши F10 отладчик каждый раз переходит вперед на одну инструкцию, однако при этом минует функции, не заходя в них (пропускаемый код в таком случае по-прежнему выполняется).

    Дополнительные сведения об этом режиме и его ограничениях см. в статье Изменить и продолжить.

    Следующие шаги

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

    Отладка с помощью JIT-отладчика в Visual Studio

    Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

    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–отладки

    Enable or disable JIT debugging

      В меню Сервис или Отладка выберите Параметры>Отладка>JIT.

    Примечание. Если параметр меню JIT не отображается, убедитесь, что отладчик JIT установлен с помощью установщика Visual Studio.

    Если вы включили JIT-отладчик, но он не открывается при сбоях или ошибках приложения, см. раздел Устранение неполадок с JIT-отладкой.

    Отключение JIT-отладки из реестра Windows

    Отладка JIT все еще может быть включена, даже если Visual Studio больше не установлена на компьютере. Если Visual Studio больше не установлена, JIT-отладку можно отключить, отредактировав реестр Windows.

    Отключение JIT-отладки путем редактирования реестра

    1. В меню Windows Пуск запустите редактор реестра (regedit.exe).
    2. В окне редактора реестра найдите и удалите следующие записи реестра, если они существуют:
      • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
      • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    JIT registry key

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    Будьте внимательны, чтобы не удалить или не изменить другие разделы реестра.

    Включение JIT-отладки для приложений Windows Forms

    По умолчанию в приложениях Windows Forms есть обработчик исключений верхнего уровня, который позволяет приложению продолжить работу, если оно может быть восстановлено. Если приложение Windows Forms выдает необработанное исключение, отображается следующее диалоговое окно:

    Windows Form unhandled exception

    Чтобы включить 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.

    1. В Visual Studio создайте консольное приложение C# (Файл>Создать>Проект>Visual C#>Консольное приложение) с именем ThrowsNullException. Дополнительные сведения о создании проектов в Visual Studio см. в пошаговом руководстве. Создание простого приложения.
    2. Когда проект откроется в Visual Studio, откройте файл Program.cs. Замените метод Main() следующим кодом, который выводит строку на консоль, а затем создает исключение NullReferenceException:

    static void Main(string[] args)
    • Выберите конфигурацию Отладка для полной отладки.
    • Если выбрана конфигурация Выпуск, необходимо отключить функцию Только мой код. В разделе Сервис>Параметры>Отладка снимите флажок Включить только мой код.

    Дополнительные сведения о конфигурациях сборки см. в разделе Общие сведения о конфигурациях сборки.

  • Откройте созданное приложение ThrowsNullException.exe в папке проекта C# (. \ThrowsNullException\ThrowsNullException\bin\Debug или . \ThrowsNullException\ThrowsNullException\bin\Release). Вы увидите следующее окно команд: Screenshot of the console for ThrowsNullException.exe, which throws an unhandled null reference exception (System.NullReferenceException).
  • Откроется диалоговое окно Выбор JIT-отладчика. Screenshot of the Choose Just-In-Time Debugger dialog box, which appears after the exception appears in the ThrowsNullException.exe console window.В разделе Доступные отладчики выберите Создать экземпляр , если она еще не выбрана.
  • Нажмите ОК. Проект ThrowsNullException открывается в новом экземпляре Visual Studio, а выполнение остановлено в строке, вызвавшей исключение: Screenshot of the ThrowsNullException project in Visual Studio, with highlighting of the line of source code that threw the exception.
  • Теперь можно начать отладку. Если вы выполняете отладку реального приложения, необходимо выяснить, почему код вызывает исключение.

    Если приложение содержит ненадежный код, появляется диалоговое окно предупреждения системы безопасности, позволяющее решить, следует ли продолжить отладку. Перед продолжением отладки решите, доверяете ли вы данному коду. Этот код написан вами самостоятельно? Если приложение выполняется на удаленном компьютере, узнаете ли вы имя процесса? Если приложение выполняется локально, учитывайте возможность выполнения такого вредоносного кода на вашем компьютере. Если вы решили, что код заслуживает доверия, нажмите ОК. В противном случае выберите Отмена.

    Устранение неполадок с отладкой 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-отладка"
      • Предупреждение безопасности. Присоединение к процессу, который принадлежит пользователю, не являющемуся доверенным, может быть опасным. Если приведенные ниже сведения выглядят подозрительными или не уверены, не присоединяйтесь к этому процессу.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *