我写的DMP文件 用WINDBUG 调试时为什么不能定位到代码

解决方案 »

  1.   


    BOOL CALLBACK CErrorReport::MiniDumpCallback(PVOID CallbackParam, 
     PMINIDUMP_CALLBACK_INPUT CallbackInput,
     PMINIDUMP_CALLBACK_OUTPUT CallbackOutput)
    {
    BOOL bRet = FALSE; 
    // Check parameters  if( CallbackInput == 0 ) 
    return FALSE;  if( CallbackOutput == 0 ) 
    return FALSE; 
    // Process the callbacks  switch( CallbackInput->CallbackType ) 
    {
    case IncludeModuleCallback: 
    {
    // Include the module into the dump 
    bRet = TRUE; 
    }
    break;  case IncludeThreadCallback: 
    {
    // Include the thread into the dump 
    bRet = TRUE; 
    }
    break;  case ModuleCallback: 
    {
    // Does the module have ModuleReferencedByMemory flag set ?  if( !(CallbackOutput->ModuleWriteFlags & ModuleReferencedByMemory) ) 
    {
    // No, it does not - exclude it  wprintf( L"Excluding module: %s \n", CallbackInput->Module.FullPath );  CallbackOutput->ModuleWriteFlags &= (~ModuleWriteModule); 
    } bRet = TRUE; 
    }
    break;  case ThreadCallback: 
    {
    // Include all thread information into the minidump 
    bRet = TRUE;  
    }
    break;  case ThreadExCallback: 
    {
    // Include this information 
    bRet = TRUE;  
    }
    break;  case MemoryCallback: 
    {
    // We do not include any information here -> return FALSE 
    bRet = FALSE; 
    }
    break;  case CancelCallback: 
    break; 
    } return bRet; 
    }bool CErrorReport::CreateDumpFile(PEXCEPTION_POINTERS pe)
    {
    if(!pe)
    {
    MessageBox(NULL, _T("未捕获到异常"), _T("未捕获到异常"), MB_OK);
    return false;
    } HINSTANCE hDbgHelp = NULL;
    HANDLE hFile = NULL;
    MINIDUMP_EXCEPTION_INFORMATION mei;
    MINIDUMP_CALLBACK_INFORMATION mci;
    TCHAR dbgHelpDLLPath[255] = _T("E:\\code\\CrashRpt_v.1.2.6_r804\\bin\\dbghelp.dll");
    TCHAR dumpFilePath[255] = _T("D:\\My Documents\\MINIDUMP.dmp");
    hDbgHelp = LoadLibrary(_T("dbghelp.dll"));
    if (hDbgHelp == NULL)
    {
    } hFile = CreateFile(dumpFilePath,
       GENERIC_WRITE,
       0,
       NULL,
       CREATE_ALWAYS,
       FILE_ATTRIBUTE_NORMAL,
       NULL);
    if(INVALID_HANDLE_VALUE == hFile)
    {
    MessageBox(NULL, _T("DUMP创建失败!"), _T("DUMP创建失败!"), MB_OK);
    return false;
    }



    mei.ThreadId = GetCurrentThreadId();
    cout<<mei.ThreadId<<endl;
    cout<<GetCurrentProcessId()<<endl;
    cin.get();
    mei.ExceptionPointers = pe;
    mei.ClientPointers = FALSE; mci.CallbackRoutine = MiniDumpCallback;
    mci.CallbackParam = this;

    MINIDUMP_TYPE mdt       = (MINIDUMP_TYPE)(MiniDumpWithIndirectlyReferencedMemory | MiniDumpScanMemory | MiniDumpNormal); typedef BOOL (WINAPI *LPMINIDUMPWRITEDUMP)( HANDLE hProcess, 
    DWORD ProcessId, 
    HANDLE hFile, 
    MINIDUMP_TYPE DumpType,
    CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, 
    CONST PMINIDUMP_USER_STREAM_INFORMATION UserEncoderParam, 
    CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam); LPMINIDUMPWRITEDUMP pfnMiniDumpWriteDump = 
    (LPMINIDUMPWRITEDUMP)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");
    if(!pfnMiniDumpWriteDump)
    {
    MessageBox(NULL, _T("MDWD函数读取失败"), _T("MDWD函数读取失败"), MB_OK);
    return false;
    }
    BOOL bWriteDump = pfnMiniDumpWriteDump(GetCurrentProcess(),
       GetCurrentProcessId(),
       hFile,
       mdt,
       &mei,
       NULL,
       &mci);
    CloseHandle(hFile);
    return true;
    }
      

  2.   

    什么叫不能定位到代码?dmp文件生成了吧?你能确认是因为生成的dump文件有问题导致你定位不到代码还是dmp文件正确, 还是你定位代码的方法不对导致没定位到??
      

  3.   

    你WinDbg设了源代码路径和符号路径没啊?
      

  4.   

    都设置了,我现在在想是不是不能再同一进程中进行DUMP的创建。
      

  5.   

    和那个PDB的文件一起嘛 设的