Как создать минидамп для моего процесса, когда он падает? - PullRequest
31 голосов
/ 10 октября 2009

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

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

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

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

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

Я использую Windows XP, C ++, VC6

Ответы [ 5 ]

28 голосов
/ 10 октября 2009

Вам необходимо программно создать минидамп (с одним исключением, см. Следующую ссылку). У CodeProject есть хорошая статья о MiniDumps . По сути, вы хотите использовать dbghelp.dll и использовать функцию MiniDumpWriteDump() (см. MSDN на MiniDumpWriteDump ).

Насколько эффективны такие дампы, во многом зависит от приложения. Иногда для оптимизированных двоичных файлов они практически бесполезны. Кроме того, без опыта ошибки кучи / стека приведут вас в заблуждение.

Однако, если оптимизатор был не слишком сложен для вас, существует большой класс ошибок, в которых помогают дампы do , а именно все ошибки, в которых есть stack-trace + значения локально используемых переменные полезны, т. е. многие вещи вызова чисто виртуальных функций (т.е. неправильный порядок уничтожения), нарушения доступа (неинициализированный доступ или пропущенные проверки NULL) и т. д.

Кстати, если ваша политика обслуживания каким-то образом это позволяет, перенесите ваше приложение с VC6 на что-то приемлемое, например, на VC8 или 9. Вы окажете себе большую услугу.

15 голосов
/ 10 октября 2009

Спасибо всем за просмотр и ответы. Отдельное спасибо gimpf, я гуглил в интернете и msdn.

Я нашел отличную статью на debugInfo.com Это стоит прочитать:

эффективные минидампы

4 голосов
/ 24 марта 2010

Мы используем Google Breakpad в Firefox, хотя для этого требуется как минимум Visual C ++ 2003. Приятным побочным преимуществом является то, что он также поддерживает OS X и Linux.

2 голосов
/ 21 декабря 2012

В итоге я использовал CrashRpt в Windows (мне потребовалось перенести всю кодовую базу и набор инструментов из MinGW в собственный компилятор Microsoft C / C ++) и google-breakpad в Linux.

1 голос
/ 10 октября 2009

Если у вас есть несколько долларов, чтобы сэкономить AQtrace , возможно, стоит посмотреть. В этом есть много преимуществ сбоя, происходящего внутри отладчика при работе на компьютере удаленного конечного пользователя.

...