http://sweeper.egloos.com/2456134
간혹 서버 Live 서비스를 하다보면, 덤프를 남기지 못하는 경우가 있다.
대부분 CRT가 유저모드 SEH 이전에 익셉션을 먹어버리는 경우와 콜 스택 오버 플로우의 경우였다.
장애가 발생하였지만 덤프가 남지 않으면 사실상 해당 문제는 해결하기 어려워진다.
지난 4월에도 AdPlus를 써보고 테스트 해봤지만, 이번 기회에 다시 한번 정리하고자 한다.
============================================================================
AdPlus는 다음 URL에서 정보를 획득할 수 있다. http://support.microsoft.com/kb/286350
AdPlus 설치
1. Debugging Tools for Windows 최신 버전을 설치한다.
2. Windows symbol package를 설치한다.
: http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx#f
: 위 사이트에서 OS 버전별로 심폴 패키지 다운로드를 할 수 있다.
3. Symbol package 설치가 완료되면, System path에 다음과 같이 등록한다.
: _NT_SYMBOM_PATH
: 값은 symbol package가 설치된 폴더 (ex. C:\Windows\Symbols\)
AdPlus 사용법
AdPlus는 process hang 또는 crash에 대해 탐지, 덤프를 남길 수 있다.
사용할 수 있는 기능은 http://support.microsoft.com/kb/286350 에 잘 정리되어 있다.
AdPlus는 확장자가 vbs이다. 단독 실행이 안되니 CScript를 사용해서 하여야 한다.
귀찮으니까 batch 파일로 만들어주던지 하자.
예제)
AdPlus.bat
CScript "C:\Program Files\Debugging Tools for Windows (x86)\adplus.vbs" -hang -pn GameServer.exe -o "d:\BEAM\Server\GameServer\"
(참고로, 감지하고자 하는 프로세스는 AdPlus를 실행하기 전에 먼저 실행되고 있어야 한다)
위 예제는 hang 감지이고 -hang 대신 -crash를 사용하면 크래쉬에 대한 탐지가 시작된다.
정상적으로 debugger가 attach 될 경우 아래 그림처럼 된다.
AdPlus 사용 소감
기본적인 SEH Set(try-except + minidump + stackwalk)을 사용할 때, worker thread에서
콜스택 오버플로우 발생시 익셉션 핸들러로 들어오지 조차 못하고
너무 조용하게 서버가 죽어버렸는데, AdPlus는 이놈을 잡아내었다.
안정적인 서버 예외 증거를 포착하기 위해서 충분히 필요한 존재라고 판단된다.
'C++' 카테고리의 다른 글
winpcap 수동 설치 (0) | 2013.02.21 |
---|---|
visual studio 2005 에 windows sdk 설치 (v7.1 : Microsoft Windows SDK for Windows 7 and .NET Framework 4) (0) | 2013.02.18 |
[펌] HTML 형식의 문자열 출력하기 (CWebBrowser2 html 코드 text로 넣기) (0) | 2013.02.12 |
CRT invalid parameter 때문에 덤프 안남는 경우 (0) | 2013.02.08 |
[펌] Debugging Tips (1) - .map 파일과 .cod 파일 분석하기 (0) | 2013.02.07 |
zlib 1.2.7 vs 2005 컴파일 (0) | 2012.11.22 |
boost uuid로 sha1 구하기? 샘플 (0) | 2012.11.20 |
_time64로 초단위 로컬 현재 시간 (0) | 2012.11.09 |