Win32: Есть ли разница между полными / мини-свалками доктора Уотсона и написанием моего?

У меня есть приложение, которое иногда сбой в сборке релиза; к сожалению, похоже, что он врезался в стороннюю DLL. Пытаясь разобраться с этим, я плавал в море КАК ИТОГИ и описания того, как Windows создает аварийные свалки.

Я думал об использовании этого предложенного мини-дампа:

Получение дампа процесса, который падает при запуске

Я планировал оставить эту функциональность в коде, поэтому дамп всегда создается для моего приложения без предварительной настройки ПК. BTW, это приложение не для распространения; он будет сопряжен с нашим собственным оборудованием, поэтому я не беспокоюсь о случайных пользователях, имеющих файлы дампов, которые строятся на своих машинах, если приложение произойдет сбой.

Дополнительное примечание: весь код – C / C ++.

Есть ли разница между тем, что доктор Ватсон (drwtsn32.exe) и этот код произведут для меня?

    С доктором Уотсоном вы получите только свалки, когда доктор увидит, что вы «разбились». Используя API-интерфейс самосвала, вы сможете вызвать его из любой точки приложения. Например. вы можете трамплировать обычные утверждения, чтобы сбрасывать, а не показывать диалог. По моему опыту, когда у вас есть поддержка дампа в вашем приложении, вам будет легче проследить, устранить и устранить различные проблемы, просто потому, что вы можете создать полный дамп (или даже мини-накопитель) в любом месте, которое вы считаете нужным код.

    Существует не так много различий, за исключением того, что если вы создаете свой собственный мини-накопитель, у вас будет больше контроля над уровнем детализации в нем. По умолчанию Minidumps имеют стек и некоторые локальные переменные, но создание собственного дает вам возможность создать полный дамп памяти, который может оказаться более полезным (хотя тогда это может сделать сбор этих дампов более проблематичным, если изображение в памяти большой).

    Если авария происходит достаточно часто, возможно, стоит просто собрать некоторые мини-накопители, которые drwatson (или werfault в Vista и далее) производит для вас, поскольку это может дать вам достаточно информации. Если это не так, у вас есть возможность добавить свой собственный необработанный фильтр исключений. Еще одна вещь, которая может произойти, заключается в том, что мини-пульт, который вы получаете, является сайтом аварии, а не первым случаем исключения, которое могло возникнуть. Создание собственных мини-дисков означает, что вы с большей вероятностью получите трассировку стека ближе к тому, где проблема.

    Другой вариант, если у вас есть машина, которая чаще всего проявляет проблему, заключается в том, чтобы запустить ADPlus в фоновом режиме – она ​​будет сидеть и ждать, пока ваше приложение не выйдет из строя или выдаст исключения, а затем создаст некоторые полезные файлы журналов. Он аналогичен тому, что и необработанный фильтр исключений, за исключением того, что он не требует изменений в вашем приложении.

    Самое главное, на что нужно обратить внимание, это то, что MiniDumpWriteDump должен выполнять выделение памяти и ввода-вывода файлов. Вызов его из отказавшего процесса может завершиться неудачно, если, например, структуры кучи повреждены.

    Вызов MiniDumpWriteDump из вспомогательного процесса работает так же, как и с использованием Dr. Watson, за исключением того, что у вас есть контроль над параметрами дампа.

    Рекомендуемое чтение: блокировка блокировки загрузчика в MiniDumpWriteDump

    Я так не думаю. Хотя Dr Watson будет генерировать полные или мини-дампы, вы можете использовать отладчик ntsd вместо этого, чтобы получить намного больше контроля над тем, какие данные включены в дампы.

    Мини-министры Dr Watson достаточно хороши для большинства вещей, вы получаете стек вызовов и переменные. ЕСЛИ вам нужно больше, ntsd имеет загрузку параметров .

    Единственное преимущество использования DrWatson заключается в том, что он предварительно устанавливается в Windows.