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

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

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

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

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

Ответы [ 5 ]

3 голосов
/ 28 марта 2011

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

MiniDumpWithPrivateReadWriteMemory | 
            MiniDumpWithDataSegs | 
            MiniDumpWithHandleData |
            MiniDumpWithFullMemoryInfo | 
            MiniDumpWithThreadInfo | 
            MiniDumpWithUnloadedModules

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

1 голос
/ 02 февраля 2011

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

1 голос
/ 15 февраля 2011

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

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

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

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

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

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

0 голосов
/ 25 ноября 2011

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

0 голосов
/ 18 октября 2010

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

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

...