This document is about: SERVER 4
SWITCH TO

Photon Server スタックオーバーフロー

スタックオーバーフローは、サイレントクラッシュを引き起こす可能性があるバックグラウンドの例外です。この例外をデバッグするのは困難です。 このドキュメントでは、Photon Server上で実行するカスタムコードが原因で発生するスタックオーバーフロー例外に対処する方法を説明します。

本番環境

スタックオーバーフローの場合にダンプやスタックトレースを収集するための、推奨された手順を以下に示します。

前提条件

  1. Debug Diagnostic Toolをダウンロードおよびインストールします。 Download v2 Update 2 or v2 Update 3.。

  2. WinDBGをダウンロードしてインストールします。 Windows Debuggerは、Windows Development Kitの一部です。お使いのWindowsに適切なdev. SDKバージョンをダウンロードしてインストールウィザードの実行中に、インストールする機能として「Debugging Tools For Windows」を選択します。

installing windbg for windows 10
WinDBG for Windows 10をインストール

デバッグ診断ツールをセットアップ:ダンプの収集

以下の手順を参照してください:

  1. Debug Diagnostic Tool ("DebugDiag 2 Collection").を開きます。デフォルトで「Select Rule Type」のウィザードウィンドウが開きます。開かない場合は「Add Rule」をクリックして、「Rule Type」として「Crash」を選択し、「Next」をクリックしてください。

    select rule type
    Rule Typeの選択
  2. 「Select Target Type」ウィンドウで「A specific process」を選択し、「Next」をクリックします。

    select target type
    Target Typeの選択
  3. 「Select Target」ウィンドウでリストから「PhotonSocketServer.exe」を選択し、「Next」をクリックします。

    select target process
    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の設定
  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 Action Limit 0の警告
  8. 「First Chance Exception Configuration」ウィンドウに、Stack Overflow例外の設定が追加されたことを確認できます。

    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. Debug Diagnosticは、「Symbol Search Path」をsrv*c:\symcache*https://msdl.microsoft.com/download/symbolsに自動的に設定するよう指示します。

    symbol search path for debugging
    Symbol Search Path for Debugging

    指示されない場合には、スタックトレースを改善するため「Tools" -> "Options & Settings」から、手動でこの設定をおこなってください。

    set debugging symbols
    デバッグシンボルの設定
  13. メインのDebug Diagnostic Toolウィンドウに戻ると、設定されたルールを参照できます。

    crash rule after configuration
    設定後のクラッシュルール

Debug Diagnostic Toolのセットアップ: ダンプ分析

  1. Debug Diagnostic Tool ("Debug Diag 2 Analysis")を開きます。

    debug diag 2 analysis
    Debug Diag 2 Analysis
  2. 「Add Data Files」を使用してダンプファイルを追加します。

    adding collected dump file
    収集されたダンプファイルを追加
  3. ダンプファイルの追加が完了したら、「分析を開始」できます。

    starting analysis of dump file
    ダンプファイルの分析を開始
  4. 分析が読み込まれますが、この読み込みには数分かかる場合があります。その後、ブラウザにレポートが表示されます。

    loading debug diagnostic analysis
    Debug Diagnostic Analysisの読み込み

Visual Studioを使用してダンプを開く

Visual Studioでダンプファイルを開き、「Debug Mixed Mode」を実行します。

open dump file in visual studio
Visual Studioでダンプファイルを開く

スタックオーバーフロー例外が発生するとデバッグが中断します。例外ブレークポイントと完全なスタックトレースを取得します。

breakpoint and stack trace from dump
ダンプからのブレークポイントとスタックトレース

WinDBGを使用してダンプを開く

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

開発環境

一度ルールが追加されると、Visual Studioデバッガを「PhotonSocketServer」プロセスに追加できなくなります。 これはルールで設定されたプロセスに、Debug Diagnostic Toolがデバッガとして自動的に追加されるためです。Debug Diagnostic ToolがPhoton Serverのアクティブなルールとともに実行されている際に、Visual StudioからPhoton Serverを起動した場合には、 Debug Diagnostic Toolはダンプを残すことなく、起動時にクラッシュします。

unable to attach process error
プロセスをアタッチできない旨のエラー

デバッグツールが互いに阻害しあわないように、以下のレジストリキーの削除を推奨します:

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