Поделиться через


DTrace Live Dump

DTrace предоставляет возможность записи динамического дампа из сценария D с помощью lkd(). Файлы дампа памяти используются для отладки сложных проблем в Windows с помощью отладчика Windows. Дополнительные сведения см. в разделе "Анализ файлов аварийного дампа с помощью WinDbg". Чтобы скачать отладчик, см. статью "Скачать и установить отладчик Windows WinDbg".

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

Замечание

DTrace поддерживается в инсайдерских сборках Windows после версии 18980 и Windows Server сборке 18975.

Общие сведения о работе с DTrace в Windows см. в разделе DTrace.

Использование динамического дампа DTrace

Использование: lkd (параметр);

Следующие параметры можно задать для изменения сведений, включенных в динамический мини-дампа.

0x0 — полный дамп ядра (значение по умолчанию)

0x1 — пользовательские страницы и страницы ядра (работает только с подключением KD)

0x2 - Minidump

0x4 - Hyper-V страницы + страницы ядра)

0x5 — страницы пользователя, ядра и гипервизора.

Пример кода динамического дампа

#pragma D option destructive

inline uint32_t STATUS_UNSUCCESSFUL = 0xc0000001UL;

syscall:::return
{ 
	this->status = (uint32_t)arg0;

	if (this->status == STATUS_UNSUCCESSFUL)
	{ 
		printf ("Return value arg0:%x \n", this->status);
		printf ("Triggering LiveDump \n");
		lkd(0);
		exit(0);
	}
}

Сохраните файл как livedumpstatuscheck.d.

Откройте командную строку от имени администратора и запустите скрипт с помощью параметра -s.

C:\Windows\System32>dtrace -s livedumpstatuscheck.d
dtrace: script 'livedumpstatuscheck.d' matched 1881 probes
dtrace: allowing destructive actions
CPU     ID                    FUNCTION:NAME
  0     93 NtAlpcSendWaitReceivePort:return Return value arg0:c0000001
Triggering LiveDump

Созданный файл дампа обычно находится в C:\Windows\LiveKernelReports.

Если расположение файла дампа было изменено, значение хранится в этом разделе реестра: hklm\system\currentcontrolset\control\crashcontrol\livekernelreports

Используйте WinDbg для работы с файлом дампа, как описано выше.

Устранение неполадок

Откройте Просмотр событий Windows: перейдите в "Журналы приложений и служб"->Microsoft->Windows->Kernel-Livedump->Operational

Если вы не нашли журналы, включите канал аналитики из командной строки или средства просмотра событий, как описано ниже.

Включение канала аналитики из командной строки

Используйте эту команду, чтобы включить аналитический канал из командной строки администратора.

wevtutil sl Microsoft-Windows-Kernel-LiveDump/Analytic /e:true

Включение канала аналитики с помощью средства просмотра событий

  1. Запуск средства просмотра событий Windows

  2. Щелкните "Просмотр" и установите флажок "Показать журналы аналитики и отладки". Это отобразит аналитический канал для livedump.

  3. Щелкните правой кнопкой мыши и включите Microsoft-Windows-Kernel-LiveDump/Analytic.

Включение полных динамических дампов

Эти примеры параметров ниже демонстрируют установку максимального числа полных дампов, которые могут храниться на диске одновременно, равного 10, и обеспечивают сохранение полных дампов памяти, а не только мини-дампов.

reg add "HKLM\System\CurrentControlSet\Control\CrashControl\FullLiveKernelReports" /f /t REG_DWORD /v FullLiveReportsMax /d 10

reg add "HKLM\System\CurrentControlSet\Control\CrashControl" /f /t REG_DWORD /v AlwaysKeepMemoryDump /d 1

Дополнительные сведения об этих параметрах см. в разделе "Параметры WER".

Отключение регулирования

Регулирование — это функция, которая предотвращает, чтобы дампы и система ведения журнала влияли на нормальное функционирование Windows. Эта функция может препятствовать созданию динамических дампов в определенных средах с ограниченными ресурсами.

Проверьте параметры регулирования динамического дампа и при необходимости повторите попытку, отключив регулирование, задав ключи SystemThrottleThreshold и ComponentThrottleThreshold равным нулю, как показано здесь.

reg add "HKLM\System\CurrentControlSet\Control\CrashControl\FullLiveKernelReports" /f /t REG_DWORD /v SystemThrottleThreshold /d 0
reg add "HKLM\System\CurrentControlSet\Control\CrashControl\FullLiveKernelReports" /f /t REG_DWORD /v ComponentThrottleThreshold /d 0

Проблемы с местом на диске (Код события 202 -Error Текст: API записи данных отложенного дампа в режиме реального времени завершен. Состояние NT: 0xC000007F.)

Это означает, что дисковое пространство недостаточно. Обновите указанный ниже раздел реестра, чтобы изменить путь для создания оперативного дампа, например, на диск d:, где доступно дополнительное свободное место.

reg add hklm\system\currentcontrolset\control\crashcontrol\livekernelreports /v "LiveKernelReportsPath" /t reg_sz /d "\??\d:\livedumps"

Эта команда задает корневой путь динамического дампа на d:\livedumps в качестве примера.

Не создавайте папку вручную, как она управляется операционной системой и будет создана при активации дампа с соответствующими разрешениями.

См. также

DTrace в Windows

Программирование DTrace Windows

Примеры кода DTrace Для Windows