none
minidump 很多崩溃问题无法生成 RRS feed

  • 问题

  • dump 只有少数崩溃问题才能生成? 

    LONG WINAPI MyUnhandledFilter(struct _EXCEPTION_POINTERS *lpExceptionInfo)
    {
    LONG ret = EXCEPTION_EXECUTE_HANDLER;
    TCHAR szFileName[64];
    SYSTEMTIME st;
    ::GetLocalTime(&st);
    sprintf(szFileName, "%d-%d-%d-%d-%d-%d-%d-%d.dmp", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, rand());

    HANDLE hFile = ::CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile != INVALID_HANDLE_VALUE)
    {
    MINIDUMP_EXCEPTION_INFORMATION ExInfo;
    ExInfo.ThreadId = ::GetCurrentThreadId();
    ExInfo.ExceptionPointers = lpExceptionInfo;
    ExInfo.ClientPointers = false;
    // write the dump
    BOOL bOK = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, NULL, NULL);
    if (bOK)
    {
    printf("Create Dump File Success!\n");
    }
    else
    {
    printf("MiniDumpWriteDump Failed: %d\n", GetLastError());
    }
    ::CloseHandle(hFile);
    }
    else
    {
    printf("Create File %s Failed %d\n", szFileName, GetLastError());
    }
    return ret;
    }

    上面这个代码如果是内存二次释放就没法抓到,为什么?生成不了dump


    …|▌'寔堅蔃の/「≯還寔╪.逞蔃﹖

    2016年11月17日 8:06

答案

  • Hi dowflyon,

    感谢在MSDN论坛发帖。

    >>上面这个代码如果是内存二次释放就没法抓到,为什么?生成不了dump

    在使用MiniDumpWriteDump时,需要注意以下几点:

    1. MiniDumpWriteDump最好从一个单独的进程调用,而不是从目标进程被转储。当目标进程已经不稳定时。例如,如果它刚刚崩溃。目标进程内调用MiniDumpWriteDump会导致加载器死锁

    2. MiniDumpWriteDump可能不会为调用线程生成有效的堆栈跟踪。要解决这个问题,您必须捕获调用线程的状态,然后调用MiniDumpWriteDump并将其用作ExceptionParam参数。一种方法是在__try / __ except块中强制使用异常,并使用GetExceptionInformation提供的EXCEPTION_POINTERS 信息。或者,您可以从新的工作线程调用函数,并从转储中过滤此工作线程。

    3. 所有DbgHelp函数,都是单线程的。因此,从多个线程调用此函数可能会导致意外的行为或内存损坏。为了避免这种情况,必须将来自多个线程的所有并发调用同步到此函数。

    更多内容请参考以下文档。

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms680360(v=vs.85).aspx

    希望可以帮助到你。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 dowflyon 2018年2月3日 6:59
    2016年11月21日 2:31