블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2797)
Unity3D (853)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

'BugTrap'에 해당되는 글 2건

  1. 2012.01.17 에러 리포트 라이브러리 BugTrap Overview 1
  2. 2012.01.17 BugTrap

이번 메일진에는 BugTrap이라는 공개 에러 리포트 라이브러리에 대해서 간단히 소개하겠습니다.^^

최근에 제가 가입한 스터디카페를 통해 알아서현재 사용중에 있는데 상당히 편리하고 괜찮은 물건입니다.

VS가 설치되지 않은 PC에서(즉 개발자가 아닌 사용자의 PC에서게임이나 툴들이 에러가 났을 때(소위 뻑났을 때원인을 분석하는 방법중에 가장 유용한 방법이 미니덤프파일(*.dmp)파일을 남겨서 덤프파일을 분석 하는 방법입니다.

버전만 맞는 소스코드와 PDB파일만 있다면에러가 났을때의 상황을 거의 100%재현이 가능하고 분석도 용이하게 해주는 방법입니다.

에러가 난 코드와 뻑이 났을때의 변수값이나 콜스택등을 바로 분석할 수 있죠.

 

에러난 PC에서 dmp파일을 남긴 후이것을 개발자 PC로 전송받는 방법은 여러 가지가 있습니다일반적으로 FTP서버나, HTTP서버로 전송을 받는데이러한 기능을 자동으로 해주는 공개 라이브러리가 지금 소개할 “BugTrap”입니다.

장점은 라이브러리만 제공하는 게 아니라. TCP서버나 HTTP서버(Web) 설치 버전도 제공이 되며에러 리포트에 덤프 파일뿐만 아니라에러가 발생한 PC의 사양 등이 포함된 에러 로그 파일과 에러날  당시의 스크린샷파일도 같이 보내준다는 것입니다.

내부에 Zip라이브러리까지 포함하고 있어서 이러한 에러 리포트 파일들은 zip으로 압축되어 전송되기 때문에용량에 대한 부담도 자동으로 해결해 줍니다.

 

아래 내용은 제가 회사에서 사용하기 위해서 간단한 Overview로 작성한 내용입니다더욱 자세한 내용을 원하시면 BugTrap링크 페이지에 가시면 자세한 소개를 보실수 있으며무료로 다운받으실 수 있습니다.

 

1. BugTrap 소개  분석

1.1. BugTrap (http://www.codeproject.com/tools/BugTrap.asp)

 

l         Code Project에 존재하는 공개 에러 리포트 라이브러리

l         BugTrap 라이브러리를 사용한 프로그램이 에러가 발생하게 되면미니덤프 파일(.dmp), 에러 로그(.xml), 스크린샷(.bmp)등을 생성한 후 zip파일로 생성 파일들을 압축하여로컬 컴퓨터에 저장하거나 BugTrap 서버로 전송할 수 있다.

l         BugTrap Server 프로그램을 이용하면자동으로 HTTP서버(Web), TCP서버를 설치할수 있으며간단한 설정만으로 에러 리포트를 서버로 전송 받을 수 있다.

l         에러가 난 경우 GUI 윈도우 창이 표시되어서 다양한 정보를 알 수 있으며원클릭으로 BugTrap Server에 에러 리포트를 전송할 수 있다.

l         크게 BugTrap Server 프로그램과  BugTrap 라이브러리로 구성되어 있으며서버 없이 라이브러리만으로도 사용이 가능하다.

l         로컬 컴퓨터에 덤프파일 저장 및, TCP HTTP을 이용하여 BugTrap Server에 에러 리포트를 전송할 수 있으며, BugTrap Server는 설치 프로그램이 포함되어 있다.

l         서버 프로그램과 헤더파일들과 Lib, DLL 파일들로 구성되어있다.

l         인스톨 버전과 잘 정리된 Document를 제공한다.

l         사용은 자유지만소스는 공개되어 있지 않다.

1.2. BugTrap Overview

 

< Dump파일은 Mail Server를 통해 개발자에게 전송되거나, BugTrap Server로 전송된다 >


 

1.3. BugTrap 사용 화면

l         프로그램 실행중 에러가 발생하면 아래와 같은 창이 뜬다.

 

l         위 창에서 ‘Submit Bug’ 버튼을 클릭하면 설정된 BugTrap Server로 덤프파일이 전송되고mail to…’를 클릭하면 설정된 mail주소로 덤프파일이 첨부된 메일이 발송된다.

l         More…’버튼을 클릭하면 아래와 같은 확장된 창이 뜬다.

 

1.4. BugTrap Server

l         BugTrap을 이용하여덤프파일을 전송하는 방법은 아래 3가지가 있다.

 

1.4.1. E-Mail 첨부 파일로 전송하는 방법

l         프로그램에서 에러가 발생했을때등록된 E-Mail에 덤프파일을 첨부하여 개발자에게 메일로 발송한다.

l         장점

n        추가로 BugTrap Server를 설치할 필요가 없다.

n        방화벽을 통과하여 전송할수 있다.

n        OutLook같은 일반 메일 클라이언트를 이용하여 메일을 작성하여 전송할수도 있다아니면 BugTrap에 내장된 간단한 메일 작성 프로그램을 이용하여 작성하여 전송한다.

l         단점

n        여러 프로그램으로부터 날라오는 에러 리포트를 필터링하여 관리할 수 없다.

n        첨부파일(덤프파일)이 너무 큰 경우 메일로 전송할 수 없을 수도 있다.

1.4.2. TCP 기반 프로토콜을 이용하여 전송하는 방법

l         BugTrap Server 프로그램을 특정 서버 컴퓨터에 설치하여클라이언트 프로그램에서 에러가 발생한 경우, TCP기반 프로토콜을 이용하여 서버로 덤프파일등을 전송한다.

l         .NET 플래폼 기반의 서버 프로그램과플래폼 독립적으로 사용할 수 있는 Java기반의 서버 프로그램의 두 종류가 있다.

l         장점

n        에러 리포트는 서버에서 설정한 저장소(폴더)에 프로그램별버전별로 폴더가 생성되어 구별되어 저장된다설정파일에서 설정한 프로그램의 에러리포트만 저장할 수 있도록 필터링이 가능하다.

n        사이즈의 제한이 없으며, TCP를 사용하기 때문에 전송속도가 빠르다.

n        BugTrap Server 프로그램이 가볍고 효율적이다.

n        Web Server가 필요 없어 어떤 컴퓨터에서 서버를 설치할 수 있다.

l         단점

n        TCP를 사용하기 때문에서버의 방화벽을 뚫지 못할수도 있다.

1.4.3. Http 기반 프로토콜을 이용하여 전송하는 방법 (WEB)

l         IIS가 설치된 Web Server Web Server Bug Trap Server를 설치하여, HTTP 기반 프로토콜을 이용하여서버로 덤프파일등을 전송한다.

l         장점

n        에러 리포트는 서버에서 설정한 저장소(폴더)에 프로그램별버전별로 폴더가 생성되어 구별되어 저장된다설정파일에서 설정한 프로그램의 에러리포트만 저장할 수 있도록 필터링이 가능하다.

n        HTTP기반이기 때문에 방화벽을 통과한다.

n        사이즈의 제한이 없다.

l         단점

n        BugTrap Server가 설치될 서버 컴퓨터에 Web Server이어야만 한다.

n        HTTP 프로토콜은 TCP 프로토콜에 비해서 속도면에서 비효율 적이다.



반응형
Posted by blueasa
, |

BugTrap

Tip & Tech / 2012. 1. 17. 10:24
이번 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같은 잘만들어진 라이브러리를 위와같은 툴로서 활용하면 보다 
빠르고 편하게 크래쉬에 대처할 수 있고, 화기애애한 개발분위기가 조성되지 않을까.


출처 : 
http://loveru0.egloos.com/1351931  

 

BugTrap 설정시 문제점들...

클라이언트에 버그트랩설치시에는 별로 어렵지 않다 나오는데로 하기만 하면된다

ANSI mutibyte 일 경우는 BugTrap.lib를 사용하고 
UNICODE일 때는 BugTrapU.lib를 사용해야한다는 것 정도만 조심하면 될듯
(똑같이 사용했는데 서버와 연결이 안되면 의심해 봐야할듯)


하지만 문제는 서버를 설치할 때이다.

버그트랩을 설치하면 해당 폴더에 Server라는 폴더가 생기고 그안에 FTP용 서버인 BugTrapServer가 존재한다

가이드를 보면 

서비스 등록
BugTrapServer.exe /install

서비스 해제
BugTrapServer.exe /uninstall


이라고 나와있다.

하지만 서비스 등록을 하려고 위와 같이 실행해보면



System.ArgumentNullException : 값은 null일 수 없습니다



라는 글이 나오는 것을 확인 할 수 있다.

해결법은 간단하다
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 폴더에 존재하는 InstallUtil.exe로 서비스에 등록하면 된다

InstallUitl.exe (절대경로)\BugTrapServer.exe

위와 같이 실행하면 된다  

반응형
Posted by blueasa
, |