将 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 就会捕获转储。然后设置 DumpCount、DumpFolder 和 DumpType 值以满足您的需要。有关这些值的更多信息,您可以参考 WER registry settings help.
我编写了一个应用程序,我希望对其进行某种程度的自动调试。我想使用 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 就会捕获转储。然后设置 DumpCount、DumpFolder 和 DumpType 值以满足您的需要。有关这些值的更多信息,您可以参考 WER registry settings help.