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

В Visual Studio 2019 Preview 1 представлен улучшенный отладчик для C++, который использует внешний 64-разрядный процесс для размещения своих ресурсозатратных компонентов. Если у вас ранее возникали проблемы с памятью при отладке приложений C++, теперь эти проблемы должны быть в значительной степени решены с помощью Visual Studio 2019.

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

uhmvjjkdy2e56odfo3il3gkbm8m.gif

Предпосылки


Давая фидбек, 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-разрядном рабочем процессе отладчика.

uhmvjjkdy2e56odfo3il3gkbm8m.gif

В 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 для разработчиков и всех, кто интересуется новыми технологиям.

© Habrahabr.ru