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

时间:2015-01-08 19:32:40

标签: windows crash-dumps

我已经编写了一个应用程序,我想要进行一定程度的自动调试。我想使用Windows错误报告将崩溃转储输出到运行应用程序的同一文件夹中。我的想法是,我可以让我的应用程序在其自己的文件夹中查找任何dmp文件,然后根据需要上传它们进行分析。

我已经为其他所有内容获得了相应的注册表项,但如何设置DumpFolder键以指向我的应用程序从哪个位置运行?

1 个答案:

答案 0 :(得分:1)

我对之前的项目有类似的要求。我想捕获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就会捕获转储。然后,您可以设置 DumpCount DumpFolder DumpType 值以满足您的需求。有关这些值的更多信息,请参阅WER registry settings help