将 CrashDumps 转储到应用程序运行的同一文件夹中

Make CrashDumps dump into same folder that app runs from

我编写了一个应用程序,我希望对其进行某种程度的自动调试。我想使用 windows 错误报告将故障转储输出到运行应用程序的同一文件夹中。我的想法是,我可以让我的应用程序在它自己的文件夹中查找任何 dmp 文件,然后在需要时上传它们进行分析。

我已经为其他所有内容获得了相应的注册表项,但是如何设置 DumpFolder 项以指向回我的应用运行的任何位置?

我之前的项目也有类似需求。我想捕获 WER 生成的故障转储文件。也就是说,我希望将其发送到 WER 报告服务器。这需要我设置 LocalDumps WER 注册表项和一些值。我编写了一个使用以下代码片段的小型实用程序。请注意,我必须 运行 此代码为 admin.

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 就会捕获转储。然后设置 DumpCountDumpFolderDumpType 值以满足您的需要。有关这些值的更多信息,您可以参考 WER registry settings help.