Почему «Начать отладку» намного медленнее, чем «Присоединиться к процессу» в VC2010?

0

У меня есть программа, которая хранит среднюю MB (до GB) в хэш-таблицах (boost :: unordered_map/unordered_set) и т.д. Когда используется "Начать отладку" в VC2010, освобождение такой таблицы может занять очень много (несколько минут), поэтому я обычно должен завершить процесс. Если я запускаю один и тот же двоичный файл без отладки, освобождение выполняется за долю секунды. В обоих случаях я использую ту же оптимизированную версию x64 для сборки.

Я прочитал 2 существующих Вопроса к теме:

но они не отвечают на мой вопрос: что конкретно делается больше, когда я начинаю отлаживать, и есть ли способ отключить это? Мне нужно обнаружение нарушений доступа и возможность устанавливать точки останова и т.д. Невозможность пройти через освобождение от ответственности и т.д. Иногда является реальной проблемой. Использование "Начать без отладки" и последующее присоединение к процессу на самом деле не упрощает работу.

  • 1
    Я предполагаю, что если VS контролирует запуск, он может иметь возможность отслеживать распределение и освобождение памяти, возможно, он больше этого не делает, если отладчик только что подключен.
Теги:
debugging
visual-studio-2010

1 ответ

2
Лучший ответ

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

Прагматичным решением является избежание отладки с наборами данных jiggabyte. Или вы можете установить переменную среды, которая отключает кучу отладки. Project + Properties, Debugging, Environment, add _NO_DEBUG_HEAP=1

  • 0
    Каким-то образом я знал, что ты придумаешь правильный ответ. Спасибо Ганс!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню