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


DTrace Live Dump

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

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

Примечание

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

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

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

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

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

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

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

0x2 — Минидамп

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.

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

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

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 значение 0, как показано ниже.

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 — текст ошибки: 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 Programming

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