Ошибки сборки Visual Studio 2019

Обновлено: 21.11.2024

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

Вы разобрались с редактором и создали код. Теперь вы хотите убедиться, что код работает правильно. В Visual Studio, как и в большинстве IDE, код работает в два этапа: создание кода для обнаружения и устранения ошибок проекта и компилятора и запуск кода для поиска ошибок времени выполнения и динамических ошибок.

Создайте свой код

Существует два основных типа конфигурации сборки: отладка и выпуск. Конфигурация отладки создает более медленный исполняемый файл большего размера, что обеспечивает более богатые интерактивные возможности отладки во время выполнения. Исполняемый файл отладки никогда не должен поставляться. Конфигурация Release создает более быстрый оптимизированный исполняемый файл, подходящий для поставки (по крайней мере, с точки зрения компилятора). Конфигурация сборки по умолчанию — отладка.

Самый простой способ собрать проект — нажать F7, но вы также можете начать сборку, выбрав в главном меню «Сборка» > «Сборка решения».

Вы можете наблюдать за процессом сборки в окне вывода в нижней части пользовательского интерфейса Visual Studio. Здесь отображаются ошибки, предупреждения и операции сборки. Если у вас есть ошибки (или если у вас есть предупреждения выше настроенного уровня), ваша сборка завершается ошибкой. Вы можете нажать на ошибки и предупреждения, чтобы перейти к строке, где они произошли. Пересоберите свой проект, либо снова нажав F7 (для перекомпиляции только файлов с ошибками), либо Ctrl+Alt+F7 (для чистого и полного перестроения).

В окне результатов под редактором есть два окна с вкладками: окно вывода, содержащее необработанные выходные данные компилятора (включая сообщения об ошибках); и окно Список ошибок, которое предоставляет сортируемый и фильтруемый список всех ошибок и предупреждений.

Если сборка прошла успешно, в окне вывода вы увидите такие результаты:

Просмотрите список ошибок

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

Щелкните строку с ошибкой в ​​окне "Список ошибок", чтобы перейти к строке, в которой возникла ошибка. (Или включите номера строк, нажав Ctrl+Q, введя номера строк, а затем выбрав Включить или выключить номера строк в меню результатов. Это самый быстрый способ открыть диалоговое окно «Параметры», в котором можно включить нумерацию строк.)

Нажмите Ctrl+G, чтобы быстро перейти к номеру строки, где произошла ошибка.

Ошибка обозначается красной волнистой линией подчеркивания. Наведите указатель мыши на него, чтобы получить дополнительные сведения. Внесите исправление, и оно исчезнет, ​​хотя вы можете ввести новую ошибку с исправлением. (Это называется «регрессией».)

Просмотрите список ошибок и исправьте все ошибки в коде.

Подробно просмотреть ошибки

Многие ошибки могут не иметь для вас смысла, если они сформулированы в терминах компилятора. В таких случаях вам потребуется дополнительная информация. В окне Список ошибок вы можете выполнить автоматический поиск Bing для получения дополнительной информации об ошибке или предупреждении.Щелкните правой кнопкой мыши соответствующую строку ввода и выберите «Показать справку по ошибке» в контекстном меню или щелкните значение кода ошибки с гиперссылкой в ​​столбце «Код» списка ошибок.

В зависимости от ваших настроек либо ваш веб-браузер отображает результаты поиска кода и текста ошибки, либо в Visual Studio открывается вкладка, отображающая результаты поиска Bing. Результаты получены из разных источников в Интернете, и не все могут быть полезными.

Используйте анализ кода

Анализаторы кода ищут распространенные проблемы с кодом, которые могут привести к ошибкам во время выполнения или проблемам в управлении кодом.

Анализ кода C++

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

Нажмите Alt + F11 (или выберите "Анализ" > "Выполнить анализ кода решения" в верхнем меню), чтобы начать статический анализ кода.

Все новые или обновленные предупреждения отображаются на вкладке "Список ошибок" в нижней части IDE. Нажмите на предупреждения, чтобы перейти к ним в коде.

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

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

При наличии опыта вы сможете быстро использовать клавиши со стрелками и Ctrl+. чтобы проверить возможности простого рефакторинга и очистить свой код!

Запустить очистку кода

Помимо форматирования файла с учетом пробелов, отступов и т. д., Code Cleanup также применяет набор определяемых вами соглашений о стиле кода. Ваши настройки для каждого стиля кода считываются из файла EditorConfig, если он есть для проекта, или из настроек стиля кода в диалоговом окне «Параметры».

Отладка работающего кода

Теперь, когда вы успешно создали свой код и выполнили небольшую очистку, запустите его, нажав F5 или выбрав Отладка > Начать отладку. Это запустит ваше приложение в среде отладки, чтобы вы могли подробно наблюдать за его поведением. IDE Visual Studio изменяется во время работы вашего приложения: окно вывода заменяется двумя новыми (в конфигурации окна по умолчанию), окном с вкладками Autos/Locals/Watch и окном с вкладками Call Stack/Breakpoints/Exception Settings/Output. В этих окнах есть несколько вкладок, которые позволяют вам проверять и оценивать переменные, потоки, стеки вызовов и различные другие параметры вашего приложения во время его работы.

Остановите приложение, нажав Shift+F5 или нажав кнопку "Стоп". Или вы можете просто закрыть главное окно приложения (или диалоговое окно командной строки).

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

Установите простые точки останова

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

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

Общее использование точек останова включает:

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

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

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

Если вы пишете код C или C++, используйте точки останова для остановки кода, чтобы вы могли проверять значения адресов (искать NULL) и счетчики ссылок при отладке сбоев, связанных с памятью.

Дополнительную информацию об использовании точек останова см. в разделе Использование точек останова.

Проверяйте свой код во время выполнения

Когда исполняемый код достигает точки останова и приостанавливается, строка кода, отмеченная желтым цветом (текущий оператор), еще не выполнена. На этом этапе вы можете захотеть выполнить текущий оператор, а затем проверить измененные значения. Вы можете использовать несколько команд step для выполнения кода в отладчике. Если отмеченный код является вызовом метода, вы можете перейти к нему, нажав F11. Вы также можете перешагнуть строку кода, нажав F10. Дополнительные команды и сведения о пошаговом выполнении кода см. в статье Навигация по коду с помощью отладчика.

На предыдущем рисунке вы можете перейти на одну инструкцию отладчика, нажав клавишу F10 или F11 (поскольку здесь нет вызова метода, обе команды дают одинаковый результат).

Пока отладчик приостановлен, вы можете проверить свои переменные и стеки вызовов, чтобы определить, что происходит. Находятся ли значения в диапазонах, которые вы ожидаете увидеть? Звонки выполняются в правильном порядке?

Наведите указатель мыши на переменную, чтобы увидеть ее текущее значение и ссылки. Если вы видите значение, которого не ожидали, возможно, у вас есть ошибка в предшествующем или вызывающем коде. Чтобы получить более подробную информацию об отладке, узнайте больше об использовании отладчика.

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

Выполнить модульные тесты

Модульные тесты — это ваша первая линия защиты от ошибок в коде, поскольку при правильном выполнении они проверяют один «модуль» кода, как правило, одну функцию, и их легче отлаживать, чем полную программу. Visual Studio устанавливает платформы модульного тестирования Microsoft как для управляемого, так и для машинного кода. Используйте среду модульного тестирования, чтобы создавать модульные тесты, запускать их и сообщать о результатах этих тестов. Повторно запускайте модульные тесты при внесении изменений, чтобы проверить, правильно ли работает ваш код. В редакции Visual Studio Enterprise вы можете автоматически запускать тесты после каждой сборки.

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

Visual Studio 2019 версии 16.9.6, отображающая ложные ошибки после сборки

Я использую Visual Studio 2019. После сборки .sln в режиме отладки возникают ошибки. Когда я дважды щелкаю ошибку на вкладке списка ошибок, ошибка исчезает со страницы, а также уменьшается количество ошибок, но когда я очищаю сборку, она снова появляется.Поскольку я следил за тем же процессом из сообщества Stack Overflow, которому снова был задан вопрос.
visual-studio-showing-fake-errors-after-build

Я пытался удалить папку .vs и даже пытался понизить ее до 4.5.2 с 4.7.2, пока ничего не работает. Любые предложения могут подтолкнуть меня к решению.

Здравствуйте, @NamanKumar-7840, добро пожаловать на форум вопросов и ответов Microsoft. Также попробуйте закрыть все экземпляры VS, переименовать (удалить) все папки ComponentModelCache по этому пути C:\Users\[имя пользователя]\AppData\Local\Microsoft\VisualStudio\16.0_XXXXXXX и удалить папки .vs, bin и obj затем снова откройте свой проект и перестройте его снова. Кроме того, попробуйте восстановить Visual Studio из установщика VS.

Спасибо, теперь ошибка постоянная и не скрывается. Я сделал все, как вы упомянули. Чего я не делал, так это

и это восстановление VS с помощью установщика

Он также снова показывает ту же проблему, если установить любую зависимость с помощью диспетчера nuget

Думаю, это проблема VS 2019, которую необходимо решить. Так как после установки некоторых пакетов он снова начал показывать и скрывать ошибки.

Привет, @NamanKumar-7840, да, это возможно. Я предлагаю вам сообщить об этой проблеме команде разработчиков VS с помощью параметра «Справка» > «Отправить отзыв» > «Сообщить о проблеме…». Перед отчетом я могу порекомендовать вам обновить VS до последней версии 16.10.0, чтобы узнать, исправлена ​​ли эта проблема в более новой версии.

Какие дополнительные сообщения вы увидите, если снять кнопки «22 ошибки» и «25 предупреждений» и нажать «0 из 52 сообщений»?

В некоторых случаях, в основном при обновлении VS, сборка 2015 года завершится ошибкой со следующим сообщением:

Visual Studio 2017

Если вы используете VS2017, во время установки обязательно установите флажок "Разработка для настольных ПК с помощью C++"

Как в VS2015, так и в VS2017 вы можете настроить это даже после того, как VS уже установлен. Перейдите в «Установка и удаление программ», щелкните правой кнопкой мыши установку VS -> вы должны получить возможность изменить установку.

Для чего это нужно?

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

Вот несколько примеров ошибок, которые мы получили:

  1. System.DllNotFoundException: невозможно загрузить DLL 'xxx\mgchart': сбой процедуры инициализации библиотеки динамической компоновки (DLL). (Исключение из HRESULT: 0x8007045A)
  2. System.DllNotFoundException — невозможно загрузить DLL «некоторая dll»: неверный доступ к ячейке памяти. (Исключение из HRESULT: 0x800703E6)
  3. Ошибки с dll с именем export.dll
  4. Ошибки с dll под названием mgexport.dll
  5. Ошибки при вызове библиотеки Crystal Report.

Изучив вопрос, мы обнаружили, что запущенный файл editbin /nxcompat с некоторой конфигурацией решил эту проблему для этих компонентов com. Дополнительную информацию о корзине редактирования см. в документации Microsoft editbin

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

До Visual Studio 2015 событие после сборки было следующим:

В Visual Studio 2017 Microsoft изменила DevEnvDir, требуя более сложного события после сборки, которое выполняет поиск папки редактирования:

Если вы хотите, вы можете скопировать этот текст в событие Post Build ваших проектов, и он будет работать в VS2017.

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

Поэтому мой совет всем, кому это надоело, удалите его, проверьте свои внешние dll и com, и если все в порядке - живите долго и счастливо без него.

В Visual Studio 2019 меня несколько разочаровывают две вещи. то есть до тех пор, пока я не потратил минуту или две на настройку поведения Visual Studio при создании своих проектов:

Окно хода сборки

Это, безусловно, самая бесполезная функция, когда-либо добавленная в Visual Studio. Это надоедливое окно всплывает по умолчанию при создании проекта и не содержит НИЧЕГО полезного, кроме индикатора выполнения внизу, показывающего какой-то процент через строить. В следующем окне показан ход сборки MvvmCross. Однако это совершенно неверно, так как не все 47 проектов готовы к сборке. На самом деле то, что я попросил построить, вероятно, включает около 10 проектов.

Почему это окно вообще существует? Есть ли другой тип проекта, в котором больше информации отображается в большой белой пустоте?

Окно списка ошибок

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

Параметры

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

– Снимите флажок «Всегда показывать список ошибок, если сборка завершается с ошибками», поскольку, как мы видели, окно списка ошибок не самое лучшее для определения того, была ли сборка успешной или нет.

– Установите флажок «Показывать окно вывода при запуске сборки» — это эффективно скроет окно «Ход сборки».

Читайте также: