Pull to refresh
0
Microsoft
Microsoft — мировой лидер в области ПО и ИТ-услуг

Внепроцессный отладчик для C++ в Visual Studio 2019

Reading time2 min
Views8.7K
Original author: Cagri Aslan
В Visual Studio 2019 Preview 1 представлен улучшенный отладчик для C++, который использует внешний 64-разрядный процесс для размещения своих ресурсозатратных компонентов. Если у вас ранее возникали проблемы с памятью при отладке приложений C++, теперь эти проблемы должны быть в значительной степени решены с помощью Visual Studio 2019.

Ниже практический пример отладки Gears of War 4.



Предпосылки


Давая фидбек, C++ разработчики часто рассказывали о проблемах, связанных с большим использованием памяти во время отладки сложных C++ приложений. Большое потребление памяти связано с огромным количеством symbol data, которую дебаггер должен загружать и показывать в окне отладчика. Причем объем этой информации во время работы все время растет. В конечном итоге процесс Visual Studio может завершиться сбоем из-за нехватки памяти.

Мы внесли значительные улучшения в Visual Studio 2017, чтобы смягчить эту проблему. Например, в обновлении 15.6 введена оптимизация памяти для /Debug:fastlink, что привело к снижению потребления памяти отладчиком на 30%. Поскольку мы стремимся избежать этой проблемы в Visual Studio 2019, мы переместили компоненты с интенсивным использованием памяти в отдельный 64-битный процесс.

Пример из практики: Отладка Gears of War 4


Мы тесно сотрудничали с внутренними и внешними партнерскими командами, чтобы гарантировать, что изменения, которые мы вносили в отладчик, были проверены и обоснованы в больших реальных приложениях. Ниже мы продублировали видео из кдпв. В нем показано параллельное сравнение использования памяти между Visual Studio 2017 и Visual Studio 2019 при отладке Gears of War 4, разработанной The Coalition. Использование памяти Visual Studio 2017 увеличивается до 1,3 ГБ после нескольких минут просмотра кода игры и проверки переменных. Visual Studio 2019 обеспечивает гораздо лучшее использование памяти в том же сценарии: объем используемой памяти остается на уровне около 285 МБ, поскольку symbol data хранится в 64-разрядном рабочем процессе отладчика.



В runtime теперь все тоже работает намного лучше.

Неподдерживаемые сценарии и некоторые известные проблемы


  • Эта функция не поддерживается в 32-битных Windows
  • Символы для модулей C++/CLI все еще загружаются in-process
  • Устаревшие надстройки C++ Expression Evaluator (здесь пример) не поддерживаются в этом режиме.

Если вам необходимо продолжить использование отладчика in-process, вы можете отключить фичу, перейдя на вкладку «Debugging» в «Tools» -> «Options» и сняв флажок «Load debug symbols in external process (native only)».



Подготовить эту статью нам помогли ребята из Microsoft Developer Community @msdevru, канала сообщества Microsoft Developer для разработчиков и всех, кто интересуется новыми технологиям.
Tags:
Hubs:
+13
Comments5

Articles

Information

Website
www.microsoft.com
Registered
Founded
Employees
Unknown
Location
США