Как создать минидамп для моего процесса, когда он падает?

Я не могу создать мини-дамп из моего процесса, изменив настройки системы. Итак, мой вопрос:

  • Будет ли система создавать мини-дамп для пользовательского процесса при сбое

    Если да, какой параметр мне нужно настроить

  • Или мне нужно создавать минидамп программно.

  • Насколько эффективны минидампы при расследовании аварии

Я использую 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, возможно, стоит посмотреть. В этом есть много преимуществ сбоя, происходящего внутри отладчика при работе на машине удаленного конечного пользователя.

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