Сделать дамп 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.

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