server | v4 switch to v3  

Photon 서버 스택 오버플로우

스택 오버플로우는 백그라운드에서 발생하는 예외사항입니다. 스택 오버플로우는 디버깅 하기 참 어렵습니다. 이 문서는 Photon 서버에서 실행되고 있는 커스텀 코드에 의해서 발생한 스택 오버플로우 예외를 어떻게 처리하는지에 대해서 설명합니다.

운영 환경

스택 오버플로우가 발생한 경우 덤프와 스택 트레이스를 수집하기 위하여 권장하고 있는 절차 입니다.

Back To Top

전제 조건

  1. 디버그 진단 툴을 다운로드 하고 설치 합니다. 최신 버전 (v2.0 Update 2) 을 다운로드 하세요 또는 이전 버전 v1.2.

  2. WinDBG 를 다운로드 하여 설치합니다. Windows 디버거는 Windows Development Kit 에 포함되어 있습니다. 자신의 윈도우 버전에 맞는 dev. SDK 를 다운로드 하시고 설치 마법사에서 "Debugging Tools For Windows" 기능을 설치시에 선택하세요.

Installing WinDBG for Windows 10
Installing WinDBG for Windows 10

Back To Top

디버그 진단 툴 셋업: Dump Collection

단계적으로 진행 해 보도록 하겠습니다.

  1. 디버그 진단 툴을 오픈 하세요 ("DebugDiag 2 Collection"). 기본적으로 "Select Rule Type" 위자드 윈도우가 오픈 되어야 합니다. 그렇지 않으면 "Add Rule" 을 클릭 하세요. "Rule Type" 은 "Crash" 로 선택하고 "Next" 를 클릭 합니다.

    Select Rule Type
    Select Rule Type

  2. "Select Target Type" 윈도우에서 , "A specific process" 를 선택하고 "Next" 를 누릅니다.

    Select Target Type
    Select Target Type

  3. In the "Select Target" window, choose "PhotonSocketServer.exe" from the list and hit "Next".

    Select Target Process
    Select Target Process

  4. "Advanced Configuration" 윈도우, "Advanced Settings" 섹션의 "Exceptions" 을 클릭합니다.

    Advanced Configuration
    Advanced Configuration

  5. "First Chance Exception Configuration" 윈도우에서 "Add Exception..." 을 클릭합니다.

    First Chance Exception Configuration
    First Chance Exception Configuration

  6. "Configure Exception" 윈도우의 예외 리스트에서 "Stack Overflow" 를 선택 합니다. 드롭다운 메뉴의 우측에서 "Action Type" 를 "Full Userdump" 로 선택하고 "Action Limit" 를 0 으로 설정 합니다. 다 되었으면 "OK" 를 클릭 합니다.

    Configure Exception
    Configure Exception

  7. Action Limit 값이 0 이라는 경고 다이얼로그가 나타날 것 입니다."Yes" 를 클릭하여 계속 합니다.

    Action Limit 0 Warning
    Action Limit 0 Warning

  8. 이제 "First Chance Exception Configuration" 윈도우에서 추가된 Stack Overflow 예외 설정을 볼 수 있습니다. "Save & Close" 를 누릅니다.

    First Chance Exception Configuration
    First Chance Exception Configuration

  9. "Advanced Configuration" 윈도우로 되돌아 가서 "Next" 를 누릅니다.

    Advanced Configuration
    Advanced Configuration

  10. "Select Dump Location And Rule Name" 윈도우에서 디폴트 룰 이름을 변경 할 수 있습니다. 폴더를 선택해서 "Userdump Location" 을 지정하고 "Next" 을 클릭 합니다.

    Select Dump Location And Rule Name
    Select Dump Location And Rule Name

  11. "Add Rule" 의 마지막 윈도우인 "Rule Completed"까지 왔습니다. "Activate the rule now" 선택 하고 "Finish"를 클릭 합니다.

    Rule Completed
    Rule Completed

  12. 디버그 진단은 "Symbol Search Path" 가 srv*c:\symcache*https://msdl.microsoft.com/download/symbols로 설정되어 자동으로 프롬포트가 나와야 합니다.

    Symbol Search Path for Debugging
    Symbol Search Path for Debugging

    그렇지 않은 경우에는 더 나은 stacktrace 를 위해 "Tools" -> "Options & Settings" 에서 수동으로 설정해 주세요.

    Set Debugging Symbols
    Set Debugging Symbols

  13. 메인 디버그 진단 툴 윈도우로 되돌아가서 설정된 규칙을 볼 수 있습니다.

    Crash Rule After Configuration
    Crash Rule After Configuration

Back To Top

디버그 진단 툴 셋업: Dump 분석

  1. 이제 디버그 진단 툴을 오픈 합니다 ("Debug Diag 2 Analysis").

    Debug Diag 2 Analysis
    Debug Diag 2 Analysis

  2. "Add Data Files" 를 이용하여 덤프 파일을 추가 합니다.

    Adding collected dump file
    Adding collected dump file

  3. 덤프 파일을 추가 했으면 "Start Analysis"를 진행 할 수 있습니다.

    Starting analysis of dump file
    Starting analysis of dump file

  4. 분석 로딩 시간이 걸린 후에 브라우저에서 보고서가 오픈되는 것을 볼 수 있습니다.

    Loading Debug Diagnostic Analysis
    Loading Debug Diagnostic Analysis

Back To Top

Visual Studio 를 이용한 덤프 오픈

Visual Studio 에서 덤프파일을 오픈 하고 "Debug Mixed Mode" 를 실행 합니다.

Open dump file in Visual Studio
Visual Studio 에서 덤프 파일 오픈

디버깅은 스택 오버플로우 예외가 발생 한 곳에서 멈추게 됩니다. 예외 중단점에서 전체 스택 트레이스를 얻을 수 있습니다.

Breakpoint and stack trace from dump
Breakpoint and stack trace from dump

Back To Top

WinDBG 를 이용한 덤프 오픈

Select Rule Type
Select Rule Type

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

Back To Top

개발 환경

규칙이 추가되었으면 "PhotonSocketServer" 프로세스로 Visual Studio 디버거에 붙일 수 없습니다. 디버그 진단 툴이 설정된 규칙으로 프로세스에 자동으로 디버거가 붙여지기 때문입니다. Photon 서버의 활성 규칙으로 디버그 진단 툴이 수행 될 때 Visual Studio 에서 Photon Server 를 시작하면 나중의 것은 아무런 덤프를 남기지 않고 시작시에 크래시 될 것 입니다.

Unable to attach process error
Unable to attach process error

디버깅 툴이 서로 방해하지 않도록 하기 위해서는 다음의 레지스트리 키를 삭제하는 것을 권해 드립니다:

  • HKEYLOCALMACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
  • HKEYLOCALMACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps

기술문서 TOP으로 돌아가기