Вопрос о дампе памяти - PullRequest
       45

Вопрос о дампе памяти

2 голосов
/ 02 ноября 2010

В настоящее время я пытаюсь разработать инструмент для создания дампа памяти, который мог бы получить дамп памяти сбойного процесса от другого процесса. Но я абсолютно новичок в этом, и я хочу использовать это как возможность получить четкое представление о методах дампа памяти.

Я хочу знать рабочую парадигму создания дампа памяти для сбойного процесса. Мое настоящее дикое воображение, как показано ниже:

Когда происходит сбой процесса, операционная система всегда это знает (я не знаю как, но она должна это делать). Затем ОС запустила какой-то механизм для копирования содержимого виртуального адресного пространства сбойного процесса в так называемый файл дампа. Тогда мы могли бы использовать WinDbg для отладки с файлом дампа.

Мне интересно, если мы сможем скопировать все виртуальное адресное пространство аварийного процесса в файл дампа, не будет ли этот файл слишком большим? Или мы могли бы указать, какое виртуальное адресное пространство (ядро / пользователь) выгружать?

Может ли кто-нибудь дать мне несколько ссылок, особенно по следующим аспектам:

  1. что такое дамп памяти?

  2. Если есть так называемые дамп ядра и дамп пользовательского режима, что это такое?

  3. На платформе Windows, какие API мне понадобятся? Будут ли актуальны такие функции, как MiniDumpWriteDump () ?

  4. Когда ОС обнаруживает сбой определенного процесса, есть ли какой-либо сигнал, который я могу отслеживать, чтобы мой Инструмент дампа был уведомлен о начале дампа?

Спасибо, что нашли время, чтобы увидеть мои слова.


ADD1:

(5) Что такое мини-отвалы? Как это связано с дампами режима ядра / пользователя?

(6) Когда мы говорим о дампе памяти, о какой памяти мы говорим? Виртуальная память или Физическая память ? Из этой картинки , я думаю, это должна быть физическая память.

ADD2:

Я только что нашел хорошую ссылку о написании MiniDump с API, содержащегося в DbgHelp.dll. Я хотел бы поделиться этим. Если вы можете предоставить другие хорошие материалы, связанные с этим, не могли бы вы поделиться им? Спасибо.

( Кстати: я буду продолжать обновлять эту ветку с моим прогрессом. Любые комментарии будут высоко оценены. )

1 Ответ

6 голосов
/ 02 ноября 2010

Зачем делать это самостоятельно? Есть много инструментов, которые делают это уже. Средства отладки для Windows включает в себя adplus и ProcDump от sysinternals может сделать это. Они оба поддерживают множество вариантов и были тщательно протестированы. Оба бесплатны.

Что касается других ваших вопросов:

1) Дамп памяти - это дамп памяти для данного процесса. Существуют различные свалки с разным уровнем детализации. Файл справки для WinDbg содержит все детали.

2) Для пользовательских приложений вам не нужны дампы ядра. Дампы ядра используются для отладки кода режима ядра - то есть драйверов и самой ОС.

3) Вы можете создавать дампы пользовательского режима, используя dbgeng.dll (который входит в Инструменты отладки для Windows), но, как я уже сказал, вы должны сначала рассмотреть существующие инструменты.

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

...