Создание нового проекта
-
Откройте Visual Studio и создайте проект.
Нажмите клавишу ESC, чтобы закрыть окно запуска. Нажмите CTRL+Q, чтобы открыть поле поиска, введите c++, выберите Шаблоны и затем Create new Console App project (Создание проекта консольного приложения). В появившемся диалоговом окне выберите Создать.
В верхней строке меню последовательно выберите Файл > Создать > Проект. В левой области диалогового окна Новый проект в разделе Visual C++ выберите Рабочий стол Windows, а затем в средней области выберите Консольное приложение Windows. Введите имя, например MyDbgApp, и нажмите ОК.
Если шаблон проекта Консольное приложение Windows отсутствует, перейдите в меню Инструменты > Получить инструменты и компоненты… , после чего запустится Visual Studio Installer. Запускается Visual Studio Installer. Выберите рабочую нагрузку Разработка классических приложений на C++ , а затем нажмите Изменить.
Visual Studio создаст проект.
-
В файле MyDbgApp.cpp замените код
следующим кодом (не удаляйте ):
event.defaultPrevented
Свойство установлено в , если действие по умолчанию было предотвращено, и , если нет.
Рассмотрим практическое применение этого свойства для улучшения архитектуры.
Помните, в главе Всплытие и погружение мы говорили о и упоминали, что останавливать «всплытие» – плохо?
Иногда вместо этого мы можем использовать , чтобы просигналить другим обработчикам, что событие обработано.
Давайте посмотрим практический пример.
По умолчанию браузер при событии (клик правой кнопкой мыши) показывает контекстное меню со стандартными опциями. Мы можем отменить событие по умолчанию и показать своё меню, как здесь:
Теперь в дополнение к этому контекстному меню реализуем контекстное меню для всего документа.
При правом клике должно показываться ближайшее контекстное меню.
Проблема заключается в том, что когда мы кликаем по элементу , то мы получаем два меню: контекстное меню для кнопки и (событие всплывает вверх) контекстное меню для документа.
Как это поправить? Одно из решений – это подумать: «Когда мы обрабатываем правый клик в обработчике на кнопке, остановим всплытие», и вызвать :
Теперь контекстное меню для кнопки работает как задумано. Но цена слишком высока. Мы навсегда запретили доступ к информации о правых кликах для любого внешнего кода, включая счётчики, которые могли бы собирать статистику, и т.п. Это слегка неразумно.
Альтернативным решением было бы проверить в обработчике , было ли отменено действие по умолчанию? Если да, тогда событие было обработано, и нам не нужно на него реагировать.
Сейчас всё работает правильно. Если у нас есть вложенные элементы и каждый из них имеет контекстное меню, то код также будет работать. Просто убедитесь, что проверяете в каждом обработчике .
event.stopPropagation() и event.preventDefault()
Как мы можем видеть, и (также известный как ) – это две разные функции. Они никак не связаны друг с другом.
Архитектура вложенных контекстных меню
Есть также несколько альтернативных путей, чтобы реализовать вложенные контекстные меню. Одним из них является единый глобальный объект с обработчиком и методами, позволяющими хранить в нём другие обработчики.
Объект будет перехватывать любой клик правой кнопкой мыши, просматривать сохранённые обработчики и запускать соответствующий.
Но при этом каждый фрагмент кода, которому требуется контекстное меню, должен знать об этом объекте и использовать его вместо собственного обработчика .
Выполнение до указанного места или функции
Вам может потребоваться выполнить код непосредственно до определенного места или функции, если вы точно знаете, какой код нужно проверить или с какого места следует начать отладку.
Выполнение до точки останова в коде
Чтобы задать простую точку останова в коде, щелкните в левом поле напротив строки кода, в которой нужно приостановить выполнение. Можно также выбрать строку и нажать клавишу F9, выбрать команду Отладка > Переключить точку останова или щелкнуть правой кнопкой мыши и выбрать команду Точка останова > Вставить точку останова. Точка останова отображается как красный кружок в левом поле рядом со строкой кода. Отладчик приостанавливает выполнение непосредственно перед выполнением строки.
Точки останова в Visual Studio предоставляют широкий набор функций, таких как условные точки останова и точки трассировки. Дополнительные сведения см. в статье Использование точек останова.
Выполнение до точки останова функции
Можно дать отладчику команду на выполнение до тех пор, пока не будет достигнута определенная функция. Можно задать функцию по имени или выбрать ее из стека вызовов.
Указание точки останова функции по имени
-
Выберите команду Отладка > Создать точку останова > Точка останова функции.
-
В диалоговом окне Новая точка останова функции введите имя функции и выберите ее язык:
-
Щелкните ОК.
Если функция перегружается или находится в нескольких пространствах имен, нужную функцию можно выбрать в окне Точки останова:
Выбор точки останова функции из стека вызовов
-
Во время отладки откройте окно Стек вызовов, выбрав пункт Отладка > Окна > Стек вызовов.
-
В окне Стек вызовов щелкните правой кнопкой мыши имя функции и выберите команду Выполнить до текущей позиции или нажмите клавиши CTRL+F10.
Сведения о визуальном отслеживании стека вызовов см. в статье Сопоставление методов в визуализации стека вызовов при отладке.
Выполнение до расположения курсора
Чтобы выполнить код до позиции курсора, в окне исходного кода или в окне Стек вызовов выберите строку, в которой нужно прервать выполнение, а затем щелкните ее правой кнопкой мыши и выберите команду Выполнить до текущей позиции или нажмите клавиши CTRL+F10. Выбор команды Выполнить до текущей позиции аналогичен заданию временной точки останова.
Принудительное выполнение до расположения курсора
Чтобы выполнить код до позиции курсора, в окне исходного кода или в окне Стек вызовов выберите строку, в которой нужно прервать выполнение, а затем щелкните ее правой кнопкой мыши и выберите элемент Force Run To Cursor (Принудительное выполнение до расположения курсора). Если выбрать параметр Force Run To Cursor (Принудительное выполнение до расположения курсора), все точки останова и первичные исключения будут пропускаться, пока отладчик не достигнет строки кода, где находится курсор.
Выполнение до щелкнутого
Во время приостановки работы отладчика можно навести указатель мыши на оператор в исходном коде или в окне Дизассемблирование и щелкнуть значок с зеленой стрелкой Выполнить до этого места. Если используется команда Выполнение до щелкнутого позволяет не устанавливать временную точку останова.
Observação
Команда Выполнение до щелкнутого доступна начиная с версии Visual Studio 2017.
Принудительное выполнение до щелчка
Когда работа отладчика приостановлена, вы можете навести указатель на оператор в исходном коде, удерживая нажатой клавишу SHIFT, и выбрать элемент Принудительное выполнение до текущей позиции (значок с двумя зелеными стрелками). При выборе этого параметра приложение присоединяет отладчик Visual Studio и приостанавливает выполнение в положении курсора. Все точки останова и первичные исключения, обнаруженные во время выполнения, временно отключаются.
Observação
Параметр Force Run to Click (Принудительное выполнение до отмеченного щелчком расположения) доступен, начиная с версии Visual Studio 2022.
Приостановка выполнения кода вручную
Чтобы приостановить выполнение в следующей доступной строке кода в выполняющемся приложении, выберите команду Отладка > Прервать все или нажмите клавиши CTRL+ALT+BREAK.
Возможные причины и решения
Эта ошибка может возникать, когда объектный файл в проекте устарел. Прежде чем использовать другие решения для этой ошибки, выполните чистую сборку, чтобы убедиться, что объектные файлы являются актуальными.
Visual Studio определяет следующие символы, чтобы предотвратить связывание несовместимого кода, что может вызвать ошибки во время выполнения или другое непредвиденное поведение.
-
указывает основной и дополнительный номера версий компилятора Microsoft C++ (MSVC), используемого для построения приложения или библиотеки. код, скомпилированный с использованием одной версии MSVC, несовместим с кодом, компилируемым с использованием версии с различными номерами основной и дополнительной версий. Дополнительные сведения см . в разделе Встроенные .
если вы связываетесь с библиотекой, которая несовместима с используемой версией MSVC и вы не можете получить или создать совместимую версию библиотеки, можно использовать более раннюю версию компилятора для сборки проекта: измените свойство набор инструментов платформы проекта на более ранний набор инструментов. Дополнительные сведения см. в статье Практическое руководство. Изменение требуемой версии .NET Framework и набора средств платформы.
-
Указывает уровень функций безопасности и отладки, включенных в стандартной библиотеке C++. Эти функции могут изменить представление определенных объектов стандартной библиотеки C++ и, таким образом, сделать их несовместимыми с теми, которые используют различные функции безопасности и отладки. Дополнительные сведения см. в разделе _ITERATOR_DEBUG_LEVEL.
-
Указывает версию стандартной библиотеки C++ и среду выполнения C, используемую приложением или библиотекой. Код, использующий одну версию стандартной библиотеки C++ или среду выполнения C, несовместим с кодом, использующим другую версию. Дополнительные сведения см. в разделе /MD,/MT,/LD (использование библиотеки Run-Time).
-
Указывает, что код, использующий , связан с объектами, скомпилированными с помощью другого параметра компилятора /ZW . (/ZW поддерживает C++/CX.) Код, который использует или зависит от PPL, должен быть скомпилирован с использованием того же параметра /ZW , который используется в остальной части приложения.
убедитесь, что значения этих символов согласованы по всем проектам в Visual Studio решении, а также что они согласованы с кодом и библиотеками, на которые ссылается ваше приложение.
Другие параметры проекта
Для отладки таких проектов, как статические библиотеки и библиотеки DLL, проект Visual Studio должен иметь возможность найти нужные файлы. Если исходный код доступен, добавьте статические библиотеки и библиотеки DLL в то же решение в виде отдельных проектов, чтобы упростить отладку. См. сведения о создании таких типов проектов в руководстве о создании и использовании библиотеки динамической компоновки (DLL) и создании и использовании статической библиотеки. Если исходный код доступен, можно создать новый проект Visual Studio, последовательно выбрав Файл > Создать > Проект из существующего кода.
См. сведения об , которые являются внешними по отношению к проекту. Если вам нужно выполнить отладку проекта библиотеки DLL без обращения к проекту вызывающего приложения, см руководство по отладке из проекта DLL.
Устранение ошибок запуска с помощью файла журнала и сообщений об ошибках
Среда выполнения Набор средств Visual Studio для Office (cреда выполнения) может записывать все возникающие при запуске ошибки в файл журнала или отображать каждую ошибку в окне сообщения. По умолчанию эти параметры отключены. Параметры можно включить, создав переменные среды.
Чтобы каждая ошибка отображалась в окне сообщения, создайте переменную среды с именем и присвойте ей значение 0 (ноль). Чтобы отключить отображение сообщений, удалите эту переменную среды или присвойте ей значение 1 (один).
Чтобы ошибки записывались в файл журнала, создайте переменную среды с именем и присвойте ей значение 1 (один). Среда выполнения Набор средств Visual Studio для Office (cреда выполнения) создает файл журнала в папке, содержащей манифест развертывания для надстройки VSTO, или в папке, содержащей документ или книгу, связанные с настройкой. Если это не удается, Набор средств Visual Studio для Office (cреда выполнения) создает файл журнала в локальной папке % TEMP% . Для надстроек VSTO уровня приложения файлу журнала по умолчанию присваивается имя имя_надстройки.vsto.log. Для проектов уровня документа файлу журнала присваивается имя имя_документа.extension.log, например ExcelWorkbook1.xlsx.log. Чтобы остановить ведение журнала ошибок, удалите переменную среды или присвойте ей значение 0 (ноль).
Просмотр стека вызовов #
В стек вызовов заносится информация для возврата управления из подпрограмм (вложенных функций) в программу (основной обработчик события OnInit, OnTick и т.д.). В стеке вы можете посмотреть весь путь от возникновения события в торговой платформе до вызова конкретной функции.
Для каждой функции отображается следующая информация:
- Название файла, из которого была вызвана функция.
- Название функции.
- Номер строки в файле, где эта функция была вызвана.
Пошаговая отладка
Для пошаговой отладки с просмотром стека вызовов используются команды меню «Отладка» или панели инструментов «Стандартная»:
- Шаг с заходом — пройти один шаг выполнения программы с заходом в вызываемые функции. Это же действие выполняется клавишей «F11».
- Шаг с обходом — пройти один шаг выполнения программы без захода в вызываемые функции. Это же действие выполняется клавишей «F10».
- Шаг наружу — переход к выполнению одного шага программы на один уровень выше. Это же действие выполняется клавишами «Shift+F11».
Команды пошаговой отладки можно использовать только после приостановки выполнения программы в режиме отладки:
- После срабатывания точки останова.
- После приостановки программы вручную командой » Приостановить» в меню или клавишей «Break».
Наступление событий в торговой платформе продолжается, даже когда программа находится в точке останова. Все наступившие события устанавливаются в очередь, и их обработка экспертом будет продолжена после выхода из кода текущего обработчика события. |
Интерактивное окно и окно интерпретации
Существуют два интерактивных окна, которые можно использовать во время сеанса отладки: стандартное окно интерпретации Visual Studio и интерактивное окно отладки Python.
Окно интерпретации (Отладка > Окна > Интерпретация) используется для быстрого вычисления выражений Python и проверки или назначения переменных в выполняющейся программе. Дополнительные сведения см. в статье Окно интерпретации.
Интерактивное окно отладки Python (Отладка > Окна > Интерактивное окно отладки Python) имеет больше возможностей, обеспечивая работу в интерактивной среде REPL во время отладки, включая написание и выполнение кода. Оно автоматически подключается к любому процессу, запущенному в отладчике с помощью стандартного средства запуска Python (включая процессы, присоединенные с помощью команды Отладка > Присоединение к процессу). Тем не менее оно недоступно при использовании отладки в смешанном режиме C/C++.
Интерактивное окно отладки поддерживает специальные команды метаданных в дополнение к .
Команда | Аргументы | Описание |
---|---|---|
, , | Запускает выполнение программы, начиная с текущего оператора. | |
, | Переместите текущий кадр на один уровень вниз в трассировке стека. | |
Отображает идентификатор текущего кадра. | ||
Идентификатор кадра | Переключает текущий кадр на кадр с указанным идентификатором. | |
Загружает команды из файла и выполняет их до завершения. | ||
Отображает идентификатор текущего процесса. | ||
Идентификатор процесса | Переключает текущий процесс на процесс с указанным идентификатором. | |
Отображает список отлаживаемых в текущий момент процессов. | ||
, , | При возможности выполняет шаг с заходом в следующий вызов функции. | |
, , | Выходит из текущей функции. | |
, , | Обходит вызов следующей функции. | |
Отображает идентификатор текущего потока. | ||
Идентификатор потока | Переключает текущий поток на поток с указанным идентификатором. | |
Отображает список отлаживаемых в текущий момент потоков. | ||
, | Переместите текущий кадр на один уровень вверх в трассировке стека. | |
, , | Отображает список кадров текущего потока. |
Обратите внимание, что стандартные окна отладчика, такие как окно процессов, окно потоков и окно стека вызовов, не синхронизируются с интерактивным окном отладки. Изменение активного процесса, потока или кадра в интерактивном окне отладки не влияет на другие окна отладки
Аналогичным образом, изменение активного процесса, потока или кадра в других окнах отладчика не влияет на интерактивное окно отладки.
Переключение на другой поток
При попытке переключиться на другой поток может появиться окно Приложение находится в режиме приостановки выполнения. В этом окне сообщается, что у потока нет кода, который может быть отображен текущим отладчиком. Например, вы можете выполнять отладку управляемого кода, но поток является машинным кодом. В окне предлагаются решения этой проблемы.
Переключение на другой поток
В окне Потоки запишите идентификатор текущего потока, который выделен желтой стрелкой в столбце Текущий поток
Переключитесь обратно на этот поток, чтобы продолжить работу приложения.
Щелкните другой поток правой кнопкой мыши и выберите Переключиться на поток из контекстного меню.
Обратите внимание, что положение желтой стрелки в окне Потоки изменилось. Исходный маркер текущего потока также остается в виде контура.
Взгляните на подсказку маркера потока в редакторе исходного кода и список в раскрывающемся меню Поток на панели инструментов Место отладки
Обратите внимание, что указанный там текущий поток также изменился.
На панели инструментов Место отладки выберите другой поток из списка Поток. Обратите внимание, что текущий поток изменяется и в других двух расположениях.
В редакторе исходного кода щелкните правой кнопкой мыши маркер потока, наведите курсор на пункт Переключиться на поток и выберите другой поток из списка. Обратите внимание, что текущий поток изменяется во всех трех расположениях.
С помощью маркера потока в исходном коде можно переключаться только на потоки, остановленные в этом расположении. С помощью окна Потоки и панели инструментов Место отладки можно переключиться на любой поток.
Вы познакомились с основами отладки многопоточных приложений. Вы можете отслеживать, помечать и снимать метки, а также замораживать и размораживать потоки, используя окно Потоки, список Поток на панели инструментов Место отладки или маркеры потоков в редакторе исходного кода.
Просмотр стека вызовов
-
Во время приостановки в цикле щелкните окно Стек вызовов, которое по умолчанию открыто в нижней правой области.
Если оно закрыто, откройте его во время приостановки в отладчике, выбрав Отладка > Окна > Стек вызовов.
-
Несколько раз нажмите клавишу F11, пока отладчик не приостановится в методе . Взгляните на окно Стек вызовов.
В окне Стек вызовов показан порядок вызова методов и функций. В верхней строке приведена текущая функция (в данном приложении метод ). Во второй строке показано, что функция была вызвана из метода и т. д.
Observação
Окно Стек вызовов аналогично перспективе «Отладка» в некоторых интегрированных средах разработки, например Eclipse.
Стек вызовов хорошо подходит для изучения и анализа потока выполнения приложения.
Дважды щелкните строку кода, чтобы просмотреть исходный код. При этом также изменится текущая область, проверяемая отладчиком. Это действие не перемещает отладчик.
Для выполнения других задач можно воспользоваться контекстными меню из окна Стек вызовов. Например, можно вставлять точки останова в указанные функции, перемещать отладчик с помощью функции Выполнение до текущей позиции и изучать исходный код. Дополнительные сведения см. в разделе Практическое руководство. просмотреть стек вызовов.
Проанализируйте проблему, задавая себе правильные вопросы
Это поможет вам выяснить, в чем состоит проблема, прежде чем приступать к ее решению. Мы полагаем, что вы уже сталкивались с проблемами в коде, иначе вряд ли читали бы сейчас эту статью в поисках советов по его отладке! Итак, прежде чем начать отладку, проанализируйте проблему, которую вы пытаетесь решить:
-
Что именно должен был выполнить код?
-
Что произошло вместо этого?
Если во время выполнения приложения вы столкнулись с ошибкой или исключением, это может быть хорошим признаком! Исключение возникает в том случае, если при выполнении кода происходит непредвиденное событие (как правило, это ошибка какого-либо рода). С помощью средства отладки вы можете перейти точно к тому месту в коде, где возникло исключение, и исследовать возможные способы исправления ситуации.
Если произошло что-то еще, каковы признаки проблемы? Есть ли у вас предположения относительно того, в каком месте кода возникла проблема? Например, если код должен выводить какой-то текст, но при этом текст содержит ошибки, вы можете сделать вывод, что в этом случае используются неверные данные или код вывода текста содержит ошибки другого рода. При пошаговом выполнении кода в отладчике вы можете изучить каждое изменение переменных и точно определить, когда и каким образом были присвоены неверные значения.
Вкладки отладчика
Параметр | Описание |
---|---|
Конфигурация | Настраивает режим для сборки приложения. Выберите в раскрывающемся списке один из вариантов: Активная (отладка) , Отладка, Выпуск, Все конфигурации. |
Действие при запуске | Определяет действие при выборе Запуск в конфигурации отладки.- Запуск проекта назначается по умолчанию и запускает автозагружаемый проект для отладки. См. сведения в руководстве по выбору запускаемого проекта.- Запуск внешней программы позволяет запустить приложение, не входящее в проект Visual Studio, и подключиться к нему. См. сведения в руководстве по присоединению к выполняемым процессам с использованием отладчика.- Запуск браузера с использованием URL-адреса позволяет выполнить отладку веб-приложения. |
Параметры запуска > Аргументы командной строки | Определяет аргументы командной строки для отлаживаемого приложения. Имя команды — это имя приложения, которое указано в поле Запуск внешней программы. |
Параметры запуска > Рабочий каталог | Определяет рабочий каталог для отлаживаемого приложения. В C# по умолчанию рабочим считается каталог \bin\debug. |
Параметры запуска > Использовать удаленный компьютер | Для удаленной отладки выберите этот вариант и введите имя удаленного целевого объекта отладки или имя сервера Msvsmon. Расположение приложения на удаленном компьютере определяется свойством Выходной путь на вкладке Сборка. Это место должно быть общим каталогом на удаленном компьютере. |
Модуль отладчика > Разрешить отладку неуправляемого кода | Выполняет отладку вызовов машинного (неуправляемого) кода Win32 из управляемого приложения. |
Модуль отладчика > Включение отладки SQL Server | Выполняет отладку объектов базы данных SQL Server. |
Просмотр стека вызовов
-
Во время приостановки в цикле щелкните окно Стек вызовов, которое по умолчанию открыто в нижней правой области.
Если оно закрыто, откройте его во время приостановки в отладчике, выбрав Отладка > Окна > Стек вызовов.
-
Несколько раз нажмите клавишу F11, пока отладчик не приостановится в методе . Взгляните на окно Стек вызовов.
В окне Стек вызовов показан порядок вызова методов и функций. В верхней строке приведена текущая функция (в данном приложении метод ). Во второй строке показано, что функция была вызвана из метода и т. д.
Observação
Окно Стек вызовов аналогично перспективе «Отладка» в некоторых интегрированных средах разработки, например Eclipse.
Стек вызовов хорошо подходит для изучения и анализа потока выполнения приложения.
Дважды щелкните строку кода, чтобы просмотреть исходный код. При этом также изменится текущая область, проверяемая отладчиком. Это действие не перемещает отладчик.
Для выполнения других задач можно воспользоваться контекстными меню из окна Стек вызовов. Например, можно вставлять точки останова в указанные функции, перемещать отладчик с помощью функции Выполнение до текущей позиции и изучать исходный код. Дополнительные сведения см. в разделе Практическое руководство. просмотреть стек вызовов.
Стек вызовов может помочь разобраться в потоке выполнения приложения, показывая порядок, в котором вызываются методы и функции.
-
Пока отладчик приостановлен в цикле , просмотрите окно Стек вызовов, которое по умолчанию открывается в нижней правой области редактора кода.
Если окно Стек вызовов закрыто, нажмите сочетание клавиш Ctrl+D, A или в строке меню выберите Отладка >Windows >Стек вызовов.
В окне Стек вызовов вы увидите желтый указатель в текущем методе .
-
Несколько раз нажмите клавишу F11, пока отладчик не приостановится в методе .
В верхней строке окна Стек вызовов показана текущая функция – метод . Во второй строке показано, что метод был вызван из метода .
Observação
Окно Стек вызовов аналогично перспективе «Отладка» в некоторых наборах IDE, например Eclipse.
В окне Стек вызовов дважды щелкните строку кода, чтобы перейти к этому исходному коду. При этом изменится текущая область, проверяемая отладчиком. Это действие не перемещает отладчик.
Для выполнения других задач можно воспользоваться контекстными меню из окна Стек вызовов. Например, можно вставить точки останова в указанные функции, переместить отладчик с помощью функции Выполнение до текущей позиции или перейти к исходному коду.
Дополнительные сведения о Стеке вызовов см. на этой странице.
Переход по коду в отладчике с помощью пошаговых команд
Здесь мы используем в основном сочетания клавиш, так как они позволяют быстро выполнять приложение в отладчике (эквивалентные команды, например команды меню, отображаются в круглых скобках).
Во время приостановки в цикле в методе дважды нажмите клавишу F11 (или выберите Отладка > Шаг с заходом), чтобы перейти в вызов метода .
После двойного нажатия клавиши F11 вы должны находиться на следующей строке кода:
Еще раз нажмите клавишу F11, чтобы выполнить шаг с заходом в метод .
Желтый указатель перемещается в метод .
F11 — это команда Шаг с заходом, которая выполняет приложение с переходом к следующему оператору. Клавишу F11 удобно использовать для более детальной проверки потока выполнения. (Мы также покажем другие варианты более быстрого перемещения по коду.) По умолчанию отладчик пропускает непользовательский код (дополнительные сведения см. в статье об отладке в режиме «Только мой код»).
Предположим, что вы закончили изучать метод и хотите выйти из него, но остаться в отладчике
Это можно сделать с помощью команды Шаг с выходом.
Нажмите сочетание клавиш SHIFT + F11 (или Отладка > Шаг с выходом).
Эта команда возобновляет выполнение приложения (и работу отладчика) до возврата данных текущим методом или текущей функции.
Вы должны вернуться в цикл в методе , приостановленный на вызове метода .
Нажмите клавишу F11 несколько раз, пока не вернетесь к вызову метода .
Во время приостановки на вызове метода один раз нажмите клавишу F10 (или выберите Отладка > Шаг с обходом).
Обратите внимание, что в этот раз отладчик не заходит в метод. Клавиша F10 перемещает отладчик без захода в функции или методы в коде приложения (код продолжает выполняться)
Нажав клавишу F10 (а не F11) в вызове метода , мы пропускаем код реализации для (пока это нас не интересует). Дополнительные сведения о различных способах перемещения по коду см. в разделе Навигация по коду в отладчике.
Навигация по коду
Чтобы продолжить работу отладчика, можно использовать различные команды. Здесь описываются полезные новые команды для навигации по коду, доступные с версии Visual Studio 2017.
Если выполнение приостановлено в точке останова, наведите указатель мыши на инструкцию и дождитесь, пока появится зеленая кнопка Выполнение до щелкнутого, после чего нажмите кнопку Выполнение до щелкнутого.
Выполнение приложения продолжится путем вызова и будет приостановлено в той строке, в которой вы нажмете эту кнопку.
В процессе пошагового выполнения кода обычно используются клавиши F10 и F11. Более подробные инструкции см. в статье Знакомство с отладчиком Visual Studio.
Другие решения
У меня была эта проблема вместе с несоответствием в ITERATOR_DEBUG_LEVEL.
Поскольку проблема воскресного вечера, в конце концов, казалась нормальной и хорошей, я был потрясен на некоторое время.
Работая в IDE de VS2017 (обозреватель решений), я недавно добавил / скопировал ссылку на исходный файл для моего проекта (Ctrl-drag) из другого проекта. Просмотр свойств-> C / C ++ / Препроцессор — на уровне исходного файла, а не на уровне проекта — Я заметил, что в конфигурации выпуска _DEBUG был указан вместо NDEBUG для этого исходного файла.
Который был всем изменением, необходимым, чтобы избавиться от проблемы.
2
Отобразить исключения
В связи с особым взаимодействием между управляемым и неуправляемым кодом Visual Studio не отображает ошибки, которые выдают приложения Microsoft Office. например, если надстройка VSTO, созданная с помощью Office средств разработки в Visual Studio вызывает исключение, то Microsoft Office приложение продолжит работу без отображения ошибки. Для просмотра этих ошибок настройте отладчик на прерывание в случае исключений среды выполнения. Дополнительные сведения см. в разделе Управление исключениями с помощью отладчика.
Если отладчик настроен на прерывание в случае исключений среды выполнения, все исключения вызывают остановку отладчика, включая обработанные исключения и некоторые исключения первого шанса, которые возникли в самой среде выполнения и могут не иметь отношения к вашему проекту. Ошибки, связанные с невозможностью обнаружения файла msosec, возникают в любом проекте и не требуют внимания. Исключения msosec никак не влияют на ваше решение.
Для перехвата исключений можно также использовать добавлять к методам операторы Try…Catch .
По умолчанию Visual Studio не отображает ошибки JIT-отладки для проектов Office, но эту функцию можно включить, чтобы видеть возникающие ошибки. Дополнительные сведения см. в разделе JIT-отладка в Visual Studio.