Идентифицирует ли отладочная сборка Visual C ++ ошибки повреждения кучи? - PullRequest
1 голос
/ 05 октября 2011

Я изо всех сил пытался обнаружить ошибку повреждения памяти в нашем продукте. Инструменты обнаружения памяти, такие как valgrind, сообщают о проблеме только во время сбоя, а не когда происходит повреждение. Я видел при использовании отладочных сборок, что он проверит область памяти до и после освобождения блока и покажет ошибку отладочного утверждения, говорящую о повреждении кучи. Так могу ли я перестроить свой продукт в режиме отладки, чтобы зафиксировать ошибку, когда она возникает? Будет ли это также перехватывать переполнения буфера и т.д.? Я не смог найти в интернете никакой информации об отладочных сборках, предназначенных для обнаружения ошибок памяти.

Ответы [ 3 ]

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

Вы также можете использовать «Кучу страниц», доступную в каждой версии Windows.Вы можете использовать gflags, входящий в комплект средств отладки для Windows, чтобы настроить полную страницу кучи для вашего приложения.Затем вы можете запустить свое приложение, даже в розничном режиме, под отладчиком.Отладчик остановится, как только вы столкнетесь с переполнением буфера или доступом к освобожденной памяти.

Мне очень нравится этот инструмент, потому что он встроен в ОС, его можно даже активировать на сайте клиента (только gflagsключи реестра, и вы можете просто отправить эти ключи своему клиенту).

Некоторые люди боятся, когда мы упоминаем (Средства отладки для Windows).Вы можете использовать Visual Studio для диагностики проблемы.Единственное, что вам нужно, это PDB, соответствующие вашим двоичным файлам (вы можете генерировать их даже для релизных сборок).

0 голосов
/ 05 октября 2011

"C ++" не является компилятором;производители делают свои собственные (более или менее) в соответствии со стандартными спецификациями.

У меня есть только опыт работы с Microsoft, и я могу сказать вам, что он проверяет повреждение кучи, распределяя «часовых» вокруг каждого new или *Блок 1004 * (конечно, только в режиме отладки) и заполняющий их специальным шаблоном (был 0xCD, когда я последний раз использовал его), а затем он проверяет охранники для каждой записи в этом месте.Если они изменились, вы получите ошибку во время выполнения о том, что куча повреждена.

Кстати, переполнения буфера повреждение кучи.

Изменить, чтобы добавитьссылка: http://msdn.microsoft.com/en-us/library/8wtf2dfz.aspx

0 голосов
/ 05 октября 2011

Я не уверен насчет отладочных сборок, но для хорошего обзора инструментов повреждения памяти вы можете посмотреть http://code.google.com/p/address-sanitizer/wiki/ComparisonOfMemoryTools. В нем перечислены Valgrind и то, что он должен иметь возможность проверить для вас.

...