На одном рабочем сайте наше приложение (*) постоянно дает сбой, но не воспроизводится. Анализ аварийных дампов ясно показывает, что это повреждение кучи: аварии находятся в другом месте, но всегда имеют доступ к нарушениям внутри _1 _ / _ 2_. Win Dbg !analyze -v
также сообщает о повреждении кучи.
До сих пор мы пытались запустить приложение с параметр GFlags Куча страницы. Проблема в том, что накладные расходы памяти Page Heap таковы, что приложение больше не будет работать (достигнув предела виртуальной памяти для 32-битного процесса).
Итак, мы не можем использовать Page Heap. Какие другие флаги было бы полезно добавить, чтобы мы либо
- получить сбой на коррупционном сайте
- или, по крайней мере, можно получить дополнительную информацию из аварийного дампа, который в конечном итоге будет сгенерирован при падении в
HeapFree
?
В настоящее время мы пробуем флаги:
в надежде, что следующий аварийный дамп будет содержать дополнительную информацию о том, что пошло не так.
Я рассмотрел эти флаги, но пока их не упомянул:
- Включить проверку параметров кучи ... Я бы ожидал довольно много накладных расходов, когда система проверяет каждый раз, когда вызывается функция кучи
- Включить проверку без кучи ... не уверен, что это действительно поможет мне купить что-нибудь
- Включить проверку кучи при вызове ... здесь даже документы предупреждают о высоких накладных расходах
Одна из проблем, которые у меня (также) есть, заключается в том, что я не уверен, как эти флаги помогают при повреждении памяти. Page Heap, очевидно, вызовет нарушение прав доступа, когда что-то записывает на страницы защиты, но как работают другие флаги?
Должен ли я запускать приложение с помощью Application Verifier, чтобы другие флаги помогли? Или возникнет исключение, когда проверочный код что-то обнаружит?
Какая комбинация этих флагов имеет наибольший смысл, чтобы приложение могло работать с нормальной производительностью и потреблением памяти в производственной среде?
(*): это 32-битное настольное приложение Windows для промышленной автоматизации. В этом случае он работает на Win7 64bit (что отлично работает на многих других сайтах).
Page Heap
будет вашим лучшим выбором. Если вы еще этого не сделали, вы можете попробовать сделать свой процесс с учетом большого адреса. Надеюсь, у вас будет достаточно памяти для фактического использования флага. - person Lieven Keersmaekers   schedule 26.09.2013