Как создать минидамп для моего процесса, когда он падает?
Я не могу создать мини-дамп из моего процесса, изменив настройки системы. Итак, мой вопрос:
Будет ли система создавать мини-дамп для пользовательского процесса при сбое
Если да, какой параметр мне нужно настроить
Или мне нужно создавать минидамп программно.
Насколько эффективны минидампы при расследовании аварии
Я использую Windows XP, C++, VC6
6 ответов
Вам необходимо программно создать мини-дамп (с одним исключением, см. Следующую ссылку). CodeProject имеет хорошую статью о MiniDumps. В основном, вы хотите использовать dbghelp.dll
и использовать функцию MiniDumpWriteDump()
(см. MSDN на MiniDumpWriteDump).
Насколько эффективны такие свалки, во многом зависит от применения. Иногда для оптимизированных двоичных файлов они практически бесполезны. Кроме того, без опыта ошибки кучи / стека приведут вас в заблуждение.
Однако, если оптимизатор не был слишком труден для вас, существует большой класс ошибок, где дампы действительно помогают, а именно все ошибки, в которых полезно использовать трассировку стека + значения локально используемых переменных, т. Е. Многие чисто виртуальные -функции вызова вещей (т.е. неправильный порядок уничтожения), нарушения доступа (неинициализированный доступ или отсутствующие проверки NULL) и т. д.
Кстати, если ваша политика обслуживания каким-то образом это позволяет, перенесите ваше приложение с VC6 на что-то приемлемое, например, на VC8 или 9. Вы окажете себе большую услугу.
Спасибо всем за просмотр и ответ, особое спасибо gimpf, я гуглил в интернете и msdn.
Я нашел отличную статью на debugInfo.com Это стоит прочитать:
Я понимаю, что это старый вопрос, но с точки зрения системных настроек (первая точка точки OP) вы можете включить настройку для использования встроенного автоматического создания дампа отчетов об ошибках Windows. Это описано здесь: https://docs.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps. Поскольку для этого требуется повышение прав, его лучше всего установить вручную (при условии, что вы являетесь администратором) или во время установки вашего приложения. Я не рекомендую устанавливать его во время выполнения, если ваше приложение не требует повышения прав.
По сути, вы создаете новый ключ под
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\<app_name.exe>
и настройте параметры там. Приятно то, что аварийные дампы создаются автоматически, и вы можете контролировать, где они хранятся, тип и какая информация включена, а также количество сохраняемых дампов.
Это, вероятно, самый простой метод создания аварийных дампов пользовательского режима и управления ими в Windows.
Мы используем Google Breakpad в Firefox, хотя для этого требуется как минимум Visual C++ 2003. Приятным побочным преимуществом является то, что он также поддерживает OS X и Linux.
В итоге я использовал CrashRpt в Windows (мне потребовалось перенести всю кодовую базу и набор инструментов из MinGW в собственный компилятор Microsoft C/C++) и google-breakpad в Linux.
Если у вас есть несколько долларов, чтобы сэкономить AQtrace, возможно, стоит посмотреть. В этом есть много преимуществ сбоя, происходящего внутри отладчика при работе на машине удаленного конечного пользователя.