Как отлаживать заблокированное приложение Windows на компьютере клиента - PullRequest
0 голосов
/ 06 ноября 2008

У меня есть многопоточное приложение Windows, которое иногда блокируется. Это неизбежно происходит в системе клиента, а не во время тестирования программного обеспечения. Какой самый простой способ получить мини-дамп Windows о текущем состоянии приложения? Если бы оно также могло завершить работу приложения, чтобы пользователь мог перезапустить его и продолжить использование системы, это было бы здорово.

Ответы [ 3 ]

2 голосов
/ 06 ноября 2008

См. Статью поддержки Microsoft Как использовать ADPlus для устранения неполадок, связанных с "зависаниями" и "сбоями" , а также полезный пост в блоге Отладка производственных приложений с использованием ADPlus .

Обе эти статьи посвящены "ADPlus", инструменту VBScript, поставляемому с инструментами отладки для Windows, который можно использовать для создания мини-дампов из производственной среды (которые впоследствии могут быть загружены с WinDbg на вашем компьютере разработки). ADPlus обладает широкими функциональными возможностями и множеством опций, поэтому может потребоваться некоторое чтение, экспериментирование и практика, чтобы найти лучший способ использовать его в вашей среде.

1 голос
/ 06 ноября 2008

В Vista вы можете создать файл дампа прямо из диспетчера задач. Щелкните правой кнопкой мыши процесс на вкладке процессов и выберите «Создать файл дампа».

До Vista я предпочел маршрут ntsd, поскольку, хотя он не совсем удобен для пользователя, он работает без установки пользователем какого-либо другого программного обеспечения, а инструкции на самом деле довольно просты для выполнения.

1 голос
/ 06 ноября 2008

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

ntsd -pn MyApp.exe

Когда появляется консоль отладчика, я могу ввести в консоль отладчика следующее:

.dump c:\my-deadlock.mdmp
.kill

То, что я ищу, - это то, что немного чище, и его легче отправить по электронной почте клиентам, чтобы они просто запускались. Я видел где-то упоминание (которое Google пока не может найти), что вы можете использовать drwtsn32.exe для извлечения аварийного дампа и завершения работы приложения.

Редактировать: можно несколько упростить команду:

ntsd -pn MyApp.exe -c ".dump c:\my-deadlock.mdmp; .kill"

Команда .detach может быть дана, если процесс не завершился окончательно (например, длительное время ожидания сети), и вы хотите, чтобы процесс продолжался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...