Photon 서버 스택 오버플로우
스택 오버플로우는 백그라운드에서 발생하는 예외사항입니다. 스택 오버플로우는 디버깅 하기 참 어렵습니다.
이 문서는 Photon 서버에서 실행되고 있는 커스텀 코드에 의해서 발생한 스택 오버플로우 예외를 어떻게 처리하는지에 대해서 설명합니다.
운영 환경
스택 오버플로우가 발생한 경우 덤프와 스택 트레이스를 수집하기 위하여 권장하고 있는 절차 입니다.
전제 조건
디버그 진단 툴을 다운로드 하고 설치 합니다. Download v2 Update 2 or v2 Update 3..
WinDBG 를 다운로드 하여 설치합니다. Windows 디버거는 Windows Development Kit 에 포함되어 있습니다.
자신의 윈도우 버전에 맞는 dev. SDK 를 다운로드 하시고 설치 마법사에서 "Debugging Tools For Windows" 기능을 설치시에 선택하세요.
디버그 진단 툴 셋업: Dump Collection
단계적으로 진행 해 보도록 하겠습니다.
디버그 진단 툴을 오픈 하세요 ("DebugDiag 2 Collection"). 기본적으로 "Select Rule Type" 위자드 윈도우가 오픈 되어야 합니다. 그렇지 않으면 "Add Rule" 을 클릭 하세요. "Rule Type" 은 "Crash" 로 선택하고 "Next" 를 클릭 합니다.
"Select Target Type" 윈도우에서 , "A specific process" 를 선택하고 "Next" 를 누릅니다.
In the "Select Target" window, choose "PhotonSocketServer.exe" from the list and hit "Next".
"Advanced Configuration" 윈도우, "Advanced Settings" 섹션의 "Exceptions" 을 클릭합니다.
"First Chance Exception Configuration" 윈도우에서 "Add Exception..." 을 클릭합니다.
"Configure Exception" 윈도우의 예외 리스트에서 "Stack Overflow" 를 선택 합니다.
드롭다운 메뉴의 우측에서 "Action Type" 를 "Full Userdump" 로 선택하고 "Action Limit" 를 0 으로 설정 합니다.
다 되었으면 "OK" 를 클릭 합니다.Action Limit 값이 0 이라는 경고 다이얼로그가 나타날 것 입니다."Yes" 를 클릭하여 계속 합니다.
이제 "First Chance Exception Configuration" 윈도우에서 추가된 Stack Overflow 예외 설정을 볼 수 있습니다. "Save & Close" 를 누릅니다.
"Advanced Configuration" 윈도우로 되돌아 가서 "Next" 를 누릅니다.
"Select Dump Location And Rule Name" 윈도우에서 디폴트 룰 이름을 변경 할 수 있습니다. 폴더를 선택해서 "Userdump Location" 을 지정하고 "Next" 을 클릭 합니다.
"Add Rule" 의 마지막 윈도우인 "Rule Completed"까지 왔습니다. "Activate the rule now" 선택 하고 "Finish"를 클릭 합니다.
디버그 진단은 "Symbol Search Path" 가
srv*c:\symcache*https://msdl.microsoft.com/download/symbols
로 설정되어 자동으로 프롬포트가 나와야 합니다.그렇지 않은 경우에는 더 나은 stacktrace 를 위해 "Tools" -> "Options & Settings" 에서 수동으로 설정해 주세요.
메인 디버그 진단 툴 윈도우로 되돌아가서 설정된 규칙을 볼 수 있습니다.
디버그 진단 툴 셋업: Dump 분석
이제 디버그 진단 툴을 오픈 합니다 ("Debug Diag 2 Analysis").
"Add Data Files" 를 이용하여 덤프 파일을 추가 합니다.
덤프 파일을 추가 했으면 "Start Analysis"를 진행 할 수 있습니다.
분석 로딩 시간이 걸린 후에 브라우저에서 보고서가 오픈되는 것을 볼 수 있습니다.
Visual Studio 를 이용한 덤프 오픈
Visual Studio 에서 덤프파일을 오픈 하고 "Debug Mixed Mode" 를 실행 합니다.
디버깅은 스택 오버플로우 예외가 발생 한 곳에서 멈추게 됩니다. 예외 중단점에서 전체 스택 트레이스를 얻을 수 있습니다.
### WinDBG 를 이용한 덤프 오픈WinDBG 를 이용하여 덤프를 오픈 하고 다음 명령어로 설정합니다.
.sympath srv*C:\symcache*https://msdl.microsoft.com/download/symbols
.reload
.loadby sos clr
. (노트: .NET 4.0 이상에서 디버깅을 하고 있다면.loadby sos clr
이 아닌 명령어.loadby sos mscorwks
입니다.)!clrstack
개발 환경
규칙이 추가되었으면 "PhotonSocketServer" 프로세스로 Visual Studio 디버거에 붙일 수 없습니다.
디버그 진단 툴이 설정된 규칙으로 프로세스에 자동으로 디버거가 붙여지기 때문입니다.
Photon 서버의 활성 규칙으로 디버그 진단 툴이 수행 될 때 Visual Studio 에서 Photon Server 를 시작하면 나중의 것은 아무런 덤프를 남기지 않고 시작시에 크래시 될 것 입니다.
디버깅 툴이 서로 방해하지 않도록 하기 위해서는 다음의 레지스트리 키를 삭제하는 것을 권해 드립니다:
HKEYLOCALMACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
HKEYLOCALMACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps