Уменьшение размера мини-дисков управляемых программ при сохранении некоторой информации о куче?
С поддержкой отладки дампа в .NET 4.0 мы автоматически изучаем (после того, как пользователь спрашивает), создавая мини-накопители сбоев программы С#, чтобы загрузить их в нашу систему отслеживания проблем (чтобы мини-пульты могли помочь в разрешении причина аварии).
Все работает нормально при использовании типа minidump WithFullMemory. Мы можем видеть как переменные стека, так и кучи. К сожалению, (zipped) дампы довольно велики даже для небольших программ на С#.
Если мы используем "обычный" тип minidump, мы получаем очень маленький дамп, но даже не информация о переменной стека доступна в управляемом отладчике. Фактически, все, что меньше, чем WithFullMemory, кажется совершенно бесполезным в управляемом отладчике. Мы предприняли несколько попыток использования MINIDUMP_CALLBACK_ROUTINE, чтобы ограничить включенную информацию о модуле нашими собственными модулями, но похоже, что он практически не влияет на управляемый дамп, но все же удается нарушить управляемую отладку?
Есть ли у кого-нибудь советы о том, как обрезать мини-накопитель, сохраняя его полезным для управляемой отладки?
Ответы
Ответ 1
Я использую следующие флаги для экономии места, создавая полезные мини-копии для приложений на С++:
MiniDumpWithPrivateReadWriteMemory |
MiniDumpWithDataSegs |
MiniDumpWithHandleData |
MiniDumpWithFullMemoryInfo |
MiniDumpWithThreadInfo |
MiniDumpWithUnloadedModules
Значения флага указаны в DbgHelp.h и должны быть привязаны к С#. Сброс дополнительно ограничен, указав CallbackRoutine.
Ответ 2
Просто fyi, как упоминалось выше, ClrDump выглядит очень круто, но похоже, что он работает только с 1.1. и 2.0 времени выполнения.
Ответ 3
При всем моем уважении я настоятельно рекомендую вам зарегистрироваться в учетной записи Microsoft WinQual, зарегистрировать свои приложения в Microsoft.
http://www.microsoft.com/whdc/winlogo/maintain/StartWER.mspx
Это позволит вам не только воспользоваться преимуществами обширных служб сбора и анализа сбоев Microsoft (бесплатно!), но также позволит публиковать исправления и исправления для ваших приложений через встроенные средства отчетности об ошибках Windows.
Кроме того, участвуя в программе WinQual, предприятия, которые развертывают ваше приложение и которые используют собственную систему отчетов об ошибках Windows, смогут собирать, сообщать и получать исправления для вашего приложения.
Другим преимуществом является использование WinQual, вы на один шаг ближе к тому, чтобы получить логотип вашего приложения!
Каждый OEM и ISV я работал с тем, кто использует WinQual, экономит ENORMOUS объем усилий и расходов по сравнению с их собственной системой сбора и регистрации сбоев.
Ответ 4
ClrDump может помочь вам.
ClrDump - это набор инструментов, позволяющих создавать небольшие мини-карты управляемых приложений. В прошлом было необходимо использовать полные свалки (очень большой по размеру), если вам необходимо выполнить посмертный анализ приложение .NET. ClrDump может производить небольшие мини-насосы, которые содержат достаточно информации для восстановления стеков вызовов всех потоков в приложение.
Ответ 5
Я написал электронное письмо автору ClrDump, задав вопрос, какие параметры MINIDUMP_TYPE используют его инструмент для создания дампов в режиме "мин". Я разместил его ответ здесь: Что минимально MINIDUMP_TYPE, установленное для выгрузки собственного С++-процесса, в котором размещается компонент .net, который сможет использовать! Clrstack в windbg