Уменьшение размера мини-дампов управляемых программ при сохранении некоторой кучи информации?

Благодаря поддержке отладки дампов в.NET 4.0 мы автоматически (после запроса пользователя:) создаем мини-дампы сбоев программы C#, чтобы загрузить их в нашу систему отслеживания ошибок (чтобы мини-дампы могли помочь в устранении причины авария).

Все работает нормально при использовании типа мини-дамп WithFullMemory. Мы можем видеть как переменные стека, так и кучи. К сожалению (сжатые) дампы достаточно велики даже для небольших программ на C#.

Если мы используем "нормальный" тип минидампа, мы получаем очень маленький дамп, но в управляемом отладчике даже нет информации о переменных стека. На самом деле, все, что меньше, чем WithFullMemory, кажется совершенно бесполезным в управляемом отладчике. Мы предприняли несколько попыток использовать MINIDUMP_CALLBACK_ROUTINE, чтобы ограничить информацию о включенных модулях нашими собственными модулями, но, похоже, это почти не влияет на управляемый дамп, но все же удается прервать управляемую отладку?

У кого-нибудь есть какие-либо советы о том, как обрезать мини-дамп, оставляя его полезным для управляемой отладки?

5 ответов

Для экономии места я использую следующие флаги, которые будут генерировать полезные мини-дампы для приложений C++:

MiniDumpWithPrivateReadWriteMemory | 
            MiniDumpWithDataSegs | 
            MiniDumpWithHandleData |
            MiniDumpWithFullMemoryInfo | 
            MiniDumpWithThreadInfo | 
            MiniDumpWithUnloadedModules

Значения флага указываются в DbgHelp.h и должны быть маршалированы в C#. Дамп дополнительно ограничен указанием CallbackRoutine.

К вашему сведению, ClrDump выглядит очень круто, но, похоже, работает только с 1.1. и 2.0 времени выполнения.

При всем уважении я настоятельно рекомендую вам зарегистрировать учетную запись Microsoft WinQual, зарегистрировать свои приложения в Microsoft.

http://www.microsoft.com/whdc/winlogo/maintain/StartWER.mspx

Это позволит вам не только воспользоваться обширными службами сбора и анализа сбоев Microsoft (бесплатно!), Но и публиковать исправления и исправления для ваших приложений с помощью встроенных в Windows средств отчетности об ошибках.

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

Еще одним преимуществом является то, что, используя WinQual, вы на один шаг ближе к сертификации вашего приложения!

Каждый OEM и ISV, с которым я работал, использующий WinQual, экономит ОГРОМНОЕ количество усилий и затрат по сравнению с собственной системой сбора данных о сбоях и отчетности.

ClrDump может помочь вам.

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

Я написал письмо автору ClrDump с вопросом, какие параметры MINIDUMP_TYPE его инструмент использовал для создания дампов в режиме 'min'. Я разместил его ответ здесь: какой минимальный MINIDUMP_TYPE установлен для создания дампа собственного процесса C++, в котором размещается компонент.net, чтобы иметь возможность использовать! Clrstack в windbg

Другие вопросы по тегам