Восстановить дамп памяти

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

Я могу использовать их с WinDbg для просмотра памяти и т. Д., Но для меня было бы наиболее полезным иметь возможность восстановить дамп в память, чтобы я мог продолжить взаимодействие с программой. Это возможно? Если так, то как? Есть ли инструмент, который может восстановить его, или мне нужно написать свой собственный.

2 ответа

Решение

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

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

Я обнаружил, что могу сделать это с помощью снимков Hyper-V. Если я запускаю свою программу на виртуальной машине, я могу дополнительно выгрузить память, создать снимок, перенести дамп, если необходимо, вернуться через некоторое время, восстановить снимок и продолжить программу.

Другие вопросы по тегам