Как мне сделать снимок процесса, чтобы сохранить его состояние для будущего исследования?Это возможно?
Вопрос
Возможно ли это, я не знаю, но это было бы очень полезно!
У меня есть процесс, который периодически завершается сбоем (работает в Windows 2000).Тогда у меня есть только один шанс отреагировать на это, прежде чем мне придется перезапускать его и мучительно ждать, пока он снова выйдет из строя.Я не писал этот процесс, поэтому у меня нет исходного кода для отладки.Неудача, казалось бы, случайна.
Имея снимок процесса, я мог многократно и быстро проверять реакцию на сбой.
Я думал о работе внутри виртуальной машины, но в данном случае это невозможно.
РЕДАКТИРОВАТЬ:@Джон Кейдж спросил:
Когда вы говорите «снимок», вы имеете в виду запись процесса, когда он вот-вот выйдет из строя (включая память, состояние программы и т. д.).и т. д.) ... а затем несколько раз воспроизводить последние несколько секунд, чтобы увидеть, какое влияние это оказывает на какой-либо другой компонент?
Это именно то, что я имею в виду!
Решение
Я думаю минидамп это то, что вы ищете.
Вы также можете использовать Пользовательский дамп:
Пользовательский режим Dumper Dumper (userDump) сбрасывает любое запущенное изображение памяти Win32 (включая системные процессы, такие как csrss.exe, winlogon.exe, services.exe и т. Д.) На Fly, без подключения отладчика или завершения целевых процессов.Сгенерированный файл дампа может быть проанализирован или отладка с помощью стандартных инструментов отладки.
Этот статья показывает, как его использовать.
Другие советы
Лучше всего запустить процесс в отладчике (ОллиДбг мой любимый инструмент).Процесс приостановится на исключении, и вы сможете попытаться выяснить, что произошло незадолго до этого.
Это требует некоторого понимания ассемблера и не позволяет создать снимок процесса для последующего анализа.Для этого вам нужно будет написать собственный отладчик - теоретически это должно быть возможно.