[펌] BugTrap

Programming 2011. 11. 30. 19:21
출처: http://loveru0.egloos.com/1351931

BugTrap 프로그램일반

이번 2차 클베의 숨어있는 공신..
BugTrap을 소개한다.

BugTrap은 프로그램이 크래쉬났을때 크래쉬정보를 분석하고,
분석된 정보를 메일서버 또는 TCP서버로 전송해주는 역할을 한다.
사용법이 매우 간단하며, 오픈소스라 적당히 커스터마이징 하기에도 무리가 없다.

일단 기본적인 BugTrap사용법에 대해 알아보고,
카르카스 온라인에서는 사용한 통계툴에 대해 소개한다.
참고로 카르카스 온라인에서는 메일서버가 아닌 TCP서버를 사용한다.

## 프로그램구동시 lib파일을 적재한다.

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

## 진입점에서 초기화한다.
void SetupBugTrap()
{
        BT_InstallSehFilter();

        // 애플리케이션의 버전을 남긴다.
        // TCP서버로 전송할 경우 버전에 따라 크래쉬정보를 모아주므로 상당히 유용한 기능이다.
        BT_SetAppVersion( cTime.Format(L"%Y-%m-%d").GetString() );

        // 애플리케이션 이름을 설정한다.
        BT_SetAppName(_T("Karcass Client"));

        // 메일서버로 전송할 경우 전송할 메일주소이다. ( 카르카스온라인에선 사용하지 않는다. )
        BT_SetSupportEMail(_T("loveru0@jcrsoft.co.kr"));

        // BugTrap의 속성을 정의한다.
        BT_SetFlags( dwFlag );

        // 대표적인 속성들은 다음과 같다.
        // BTF_DETAILEDMODE : 미니덤프나 로그파일등을 압축해서 모두 전송해준다. 
                                              정의하지 않을 경우 기본적인 정보만 전송해준다.
        // BTF_SCREENCAPTURE : 스크린샷을 첨부한다.

        // 미니덤프에 참조변수까지 남긴다.
        BT_SetDumpType( MiniDumpWithDataSegs | MiniDumpWithIndirectlyReferencedMemory );

        // 전송할 TCP서버를 세팅한다.
        BT_SetSupportServer(_T("000.00.000.000"), 9999);

        // Log생성
        g_jBT_LogSound = BT_OpenLogFile( L"SoundLog.txt", BTLF_TEXT );
        BT_SetLogSizeInEntries( g_jBT_LogSound, 1024 );
        BT_SetLogFlags( g_jBT_LogSound, BTLF_SHOWLOGLEVEL | BTLF_SHOWTIMESTAMP );
        BT_SetLogLevel( g_jBT_LogSound, BTLL_INFO );
        BT_AddLogFile( BT_GetLogFileName( g_jBT_LogSound ) );
}

## 생성한 로그사용
HRESULT JSound::LoadSoundFromMemory( const char* cFileName )
{
        ...

        BT_InsLogEntryF( 
                g_jBT_LogSound, BTLL_INFO, _T("LoadSoundFromMemory : %s"), JUtil::ToWideString(cFileName).c_str() );

        ...
}

TCP서버를 사용하므로 서버머신에 BugTrap서버프로그램을 실행시켜두는 것으로 기본적인 세팅은 끝이다.

다음은 크래쉬가 났을때의 BugTrap의 모습이다.












보시다시피 뭐가뭔지 영어의 압박이 밀려온다.
과연 유저가 저화면을 만났을때 제대로 전송버튼을 눌려줄까?

여기서 오픈소스의 장점이 나타난다.
다음과 같이 알아보기 쉽게 변형해서 사용하자.















이제 통계툴을 소개한다.
위에서 메일서버가 아닌 TCP서버를 사용한 이유가 여기서 나타난다.
메일서버는 속도가 느리며, 저장방식이 툴만들기에 적합하지 않기 때문이다.

앞서얘기했듯이 TCP서버로 전송되어져온 크래쉬 정보는 Version별로 생성된 폴더에 저장된다.
Version으로 클라이언트가 실행될때의 날짜를 세팅하고 있으므로 날짜별로 같은폴더에 모이는 효과를 가진다.

툴은 특정폴더내의 크래쉬정보들을 대상으로 통계작업을 수행하면 된다.














개별적인 크래쉬정보는 ZIP파일로 압축되어 있으며
압축파일내의 크래쉬정보파일, 미니덤프파일, 로그파일등을 적절히 이용하면 된다.

카르카스온라인에서 사용하고 있는 분석툴이다.
보안상 부분적으로만 공개한다.

폴더를 열면 폴더내의 크래쉬정보들을
파일명과 함수명을 기준으로 통계작업을 수행한다.
























종류별로 모아진 데이터를 기반으로 개별적인 정보들을 보여준다.





































서비스를 하다보면 수많은 크래쉬에 프로그래머들은 지쳐간다.
BugTrap같은 잘만들어진 라이브러리를 위와같은 툴로서 활용하면 보다
빠르고 편하게 크래쉬에 대처할 수 있고, 화기애애한 개발분위기가 조성되지 않을까.


Posted by 세모아
,