Windows調試技術-建立MiniDump檔案

來源:互聯網
上載者:User
我們經常遇到這樣的情況,在程式運行過程中,突然的就crash掉了,並且又是在customer那裡crash的。這個時候我們需要藉助於dump檔案來尋找發生exception的位置。下面的代碼是建立一個MiniDump檔案,至於為什麼叫Mini,並不是因為小或是內容少的原因,而是相對於FullDump而言,MiniDump檔案只儲存了進程在crash的是部分關鍵的virtual memory資訊。Code
#include "stdafx.h"
#include <Windows.h>
#include <DbgHelp.h>

#pragma comment(lib, "DbgHelp.lib")

void CreateMiniDump( LPEXCEPTION_POINTERS lpExceptionInfo) {
    // Open a file
    HANDLE hFile = CreateFile(_T("MiniDump.dmp"), GENERIC_READ | GENERIC_WRITE,
        0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    if ( hFile != NULL &&  hFile != INVALID_HANDLE_VALUE ) {

        // Create the minidump 
        MINIDUMP_EXCEPTION_INFORMATION mdei;
        mdei.ThreadId          = GetCurrentThreadId();
        mdei.ExceptionPointers = lpExceptionInfo;
        mdei.ClientPointers    = FALSE;

        MINIDUMP_TYPE mdt      = MiniDumpNormal;
        BOOL retv = MiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(),
            hFile, mdt, ( lpExceptionInfo != 0 ) ? &mdei : 0, 0, 0);
        
        if ( !retv ) {
            _tprintf( _T("MiniDumpWriteDump failed. Error: %u \n"), GetLastError() ); 
        } else { 
            _tprintf( _T("Minidump created.\n") ); 
        }

        // Close the file
        CloseHandle( hFile );

    } else {
        _tprintf( _T("CreateFile failed. Error: %u \n"), GetLastError() ); 
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    __try {
        int * p = NULL;
        *p = 20;
    }
    __except(CreateMiniDump(GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) {
    }

    return 0;
}

在做minidump檔案的時候,會有一種情況是寫不出dump檔案的。那就是在這個異常塊的外面還有異常處理模組,並且已經設定了不儲存minidump檔案處理,這個時候就沒辦法寫出dump來了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.