Сделать дамп CrashDumps в ту же папку, из которой запускается приложение
Я написал приложение, для которого я хочу иметь некоторый уровень автоматической отладки. Я хочу использовать отчеты об ошибках Windows для вывода аварийного дампа в ту же папку, из которой запущено приложение. Моя идея заключается в том, что я могу тогда, чтобы мое приложение посмотрело в своей папке какие-либо dmp-файлы и затем загрузило их для анализа при необходимости.
У меня есть соответствующие ключи реестра для всего остального, но как мне настроить ключ DumpFolder, чтобы он указывал на то место, из которого запускается мое приложение?
1 ответ
У меня было похожее требование к предыдущему проекту. Я хотел перехватить файл аварийного дампа, который создает WER. То есть я не хотел, чтобы его отправляли на сервер отчетов WER. Это потребовало от меня установки ключа реестра LocalDumps WER и некоторых значений. Я написал небольшую служебную программу, которая использует следующий фрагмент кода. Обратите внимание, я должен был запустить этот код от имени администратора.
CRegKey rk;
TCHAR pszValue[MAX_PATH+1] = {0};
DWORD dwValue = 0;
DWORD dwSize = MAX_PATH;
// check for existence of "LocalDumps" key.
LONG ret = rk.Open (HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\Windows Error Reporting"),
KEY_WRITE | KEY_WOW64_64KEY);
if (ret == ERROR_SUCCESS)
{
ret = rk.Create (rk.m_hKey, _T("LocalDumps\\<your application>.exe"));
if (ret == ERROR_SUCCESS)
{
CString szText;
DWORD dwValue = 0;
m_NumDumpsED.GetWindowText (szText);
dwValue = atol (szText);
rk.SetDWORDValue (_T("DumpCount"), dwValue);
m_DumpFolderED.GetWindowText (szText);
rk.SetStringValue (_T("DumpFolder"), szText);
dwValue = (m_MiniFullRB == 0) ? 1 : 2;
rk.SetDWORDValue (_T("DumpType"), dwValue);
}
else
AfxMessageBox (_T("Error creating 'LocalDumps\\<your application>.exe' key"), MB_OK);
}
Чтобы перехватить файл дампа, вы должны создать дочерний подраздел для LocalDumps, который является именем вашего приложения. Эта часть может быть не очевидна в документации WER. Пока этот ключ существует, WER будет перехватывать дамп. Затем вы устанавливаете значения DumpCount, DumpFolder и DumpType в соответствии со своими потребностями. Для получения дополнительной информации об этих значениях вы можете обратиться к справке по настройкам реестра WER.