Как остановить визуальную студию, используя отладку бесплатно - PullRequest
3 голосов
/ 17 октября 2011

Моему приложению требуется освободить очень большую хеш-таблицу, и она невероятно медленная в режиме отладки, настолько медленная, что я не могу реально с ней работать ... но в режиме выпуска у меня вообще нет отладочных символов .. Мне нужно отладить исполняемый файл и понять, что я смогу связать его с релизными версиями библиотек crt. Я сделал это, изменив мои параметры «генерации кода», чтобы использовать «многопоточный dll», а не «многопоточный отладочный dll», однако, когда я ставлю точку останова в моей свободной хэш-таблице и выполняю ее до фактического свободного вызова, это используя функцию в отладочной DLL.

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

(против 2010 г.)

Ответы [ 2 ]

1 голос
/ 17 октября 2011

У вас могут быть символы отладки, несмотря на то, что вы используете CRT-релиз и все оптимизации включены. Фактически это то, что по умолчанию используется в Visual C ++ в конфигурации выпуска (см. Свойства проекта / Свойства конфигурации / C / C ++ / Общие / Формат информации об отладке; и Компоновщик / Отладка / Создать информацию об отладке). Обратите внимание, что оптимизированный код может быть сложнее отладить - порядок команд может быть изменен, а некоторые части могут быть полностью оптимизированы, вызывая неожиданное поведение при пошаговом выполнении кода.

Кстати, чтобы отключить CRT отладки, недостаточно просто изменить «Многопоточная DLL отладки (/ MDd)» на «Многопоточная DLL (/ MD)», также необходимо удалить _DEBUG из определений препроцессора.

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

Если это так, и вы не можете уменьшить размер хеш-таблицы только для целей отладки, вам придется либо прибегнуть к «отладке printf» (то есть вручную вставить диагностику), либо, возможно, попробовать удаленную отладку.

1 голос
/ 17 октября 2011

Добавьте это в начале stdafx.h или определите его как макрос препроцессора для вашей отладочной сборки:

#define _SECURE_SCL 0

Это приведет к следующему, что сделает ваш код более быстрым в отладкеmode:

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

Если выходной итератор является проверенным итератором:

  • Выбудет проверено поведение при вызовах стандартной функции (например, std :: copy).
  • Вы получите проверенное поведение при вызовах проверенной функции (например, stdext :: check_copy).
  • Вы получите проверенное поведение при вызовах непроверенной функции (например, stdext :: unchecked_copy).

Если выходной итератор является непроверенным итератором:

  • Вы получите непроверенное поведение при вызовах стандартной функции (например, std :: copy).
  • Вызов проверенной функции (например, stdext :: checked_copy) приведет к предупреждению компилятора.
  • Вы получите непроверенное поведение при вызовах непроверенной функции (stdext :: unchecked_copy, дляпример).

Подробнее об этом поведении читайте в разделе Проверенные итераторы в MSDN.Как правило, вы хотите, чтобы проверенные итераторы были включены для сборок отладки, но есть определенные приложения, которые за короткий промежуток времени выполняют много операций, из-за которых они могут стать помехой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...