Сохранить сообщения об ошибках Windows из зависшего приложения - PullRequest
1 голос
/ 11 декабря 2008

Приложение иногда зависает, и я хотел бы увидеть дамп в то время, чтобы выяснить это. Я написал приложение, которое пользователь может запустить, чтобы автоматически создать дамп, на который я могу смотреть. Однако я не могу заставить пользователей вспомнить его запуск, когда он зависает, что бы я ни пытался. Они всегда заканчивают тем, что закрывали программу, которая вызывает Windows Error Reporting.

WER создает дампы во временном каталоге, но, к сожалению, они удаляются, как только закрывается диалоговое окно для отправки информации в Microsoft.

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

Я не могу себе представить, что я единственный, кто столкнулся с этой проблемой. Это программное обеспечение используется одновременно десятками и десятками сотрудников, поэтому они достигают их всех и заставляют их запускать приложение или не нажимать кнопку «Закрыть» в этом диалоговом окне, пока не запустится какое-либо другое приложение или что-то подобное.

Приложение работает на Windows Server 2003. Плохо, поскольку я знаю, что в Server 2008 есть несколько опций LocalDumps, которые позволят мне их сохранить.

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

Спасибо за любой совет!

1 Ответ

1 голос
/ 11 декабря 2008

Вы можете выбрать автоматическое решение. Я полагаю, что в вашем распоряжении есть несколько вариантов для определения того, зависли ли вы.

Одним из них будет использование SendMessageTimeout (также обратите внимание на SMTO_ABORTIFHUNG в качестве одного из значений fuFlags) из отдельного потока в вашем приложении. Как только вы определили, что основной поток не отвечает, вы можете сохранить файл дампа в любом месте. Существует также IsHungAppWindow () (user32.dll), доступный начиная с w2k.

...