Photon Server スタックオーバーフロー
スタックオーバーフローは、サイレントクラッシュを引き起こす可能性があるバックグラウンドの例外です。この例外をデバッグするのは困難です。
このドキュメントでは、Photon Server上で実行するカスタムコードが原因で発生するスタックオーバーフロー例外に対処する方法を説明します。
本番環境
スタックオーバーフローの場合にダンプやスタックトレースを収集するための、推奨された手順を以下に示します。
前提条件
- Debug Diagnostic Toolをダウンロードおよびインストールします。 Download v2 Update 2 or v2 Update 3.。 
- WinDBGをダウンロードしてインストールします。 Windows Debuggerは、Windows Development Kitの一部です。お使いのWindowsに適切なdev. SDKバージョンをダウンロードしてインストールウィザードの実行中に、インストールする機能として「Debugging Tools For Windows」を選択します。 
デバッグ診断ツールをセットアップ:ダンプの収集
以下の手順を参照してください:
- Debug Diagnostic Tool ("DebugDiag 2 Collection").を開きます。デフォルトで「Select Rule Type」のウィザードウィンドウが開きます。開かない場合は「Add Rule」をクリックして、「Rule Type」として「Crash」を選択し、「Next」をクリックしてください。 - Rule Typeの選択 
- 「Select Target Type」ウィンドウで「A specific process」を選択し、「Next」をクリックします。 - Target Typeの選択 
- 「Select Target」ウィンドウでリストから「PhotonSocketServer.exe」を選択し、「Next」をクリックします。 - Target Processの選択 
- 「Advanced Configuration」ウィンドウの「Advanced Settings」セクションで、「Exceptions」をクリックします。 - Advanced Configuration 
- 「First Chance Exception Configuration」ウィンドウで、「Add Exception...」をクリックします。 - First Chance Exceptionの設定 
- 「Configure Exception」ウィンドウで、例外のリストから「Stack Overflow」を選択します。 
 右側のドロップダウンメニューから「Action Type」として「Full Userdump」を選択し、「Action Limit」を0に設定します。
 完了したら、「OK」をクリックします。- Configure Exception 
- Action Limitの値が0である点について、警告ダイアログボックスが表示されます。「Yes」をクリックして、続行します。 - Action Limit 0 Warning Action Limit 0の警告 
- 「First Chance Exception Configuration」ウィンドウに、Stack Overflow例外の設定が追加されたことを確認できます。 - First Chance Exception Configuration 
- 「Advanced Configuration」ウィンドウに戻り、「Next」をクリックします。 - Advanced Configuration 
- 「Select Dump Location And Rule Name」ウィンドウでは、デフォルトのルール名を変更できます。任意の一時フォルダパスに「Userdump Location」を設定し、「Next」をクリックします。 - Select Dump Location And Rule Name 
- 「Add Rule」ウィザードは、最後のウィンドウ「Rule Completed」を開きます。「Activate the rule now」を選択し、「Finish」をクリックします。 - Rule Completed 
- Debug Diagnosticは、「Symbol Search Path」を - srv*c:\symcache*https://msdl.microsoft.com/download/symbolsに自動的に設定するよう指示します。- Symbol Search Path for Debugging - 指示されない場合には、スタックトレースを改善するため「Tools" -> "Options & Settings」から、手動でこの設定をおこなってください。 - デバッグシンボルの設定 
- メインのDebug Diagnostic Toolウィンドウに戻ると、設定されたルールを参照できます。 - 設定後のクラッシュルール 
Debug Diagnostic Toolのセットアップ: ダンプ分析
- Debug Diagnostic Tool ("Debug Diag 2 Analysis")を開きます。 - Debug Diag 2 Analysis 
- 「Add Data Files」を使用してダンプファイルを追加します。 - 収集されたダンプファイルを追加 
- ダンプファイルの追加が完了したら、「分析を開始」できます。 - ダンプファイルの分析を開始 
- 分析が読み込まれますが、この読み込みには数分かかる場合があります。その後、ブラウザにレポートが表示されます。 - Debug Diagnostic 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
開発環境
一度ルールが追加されると、Visual Studioデバッガを「PhotonSocketServer」プロセスに追加できなくなります。 これはルールで設定されたプロセスに、Debug Diagnostic Toolがデバッガとして自動的に追加されるためです。Debug Diagnostic ToolがPhoton Serverのアクティブなルールとともに実行されている際に、Visual StudioからPhoton Serverを起動した場合には、 Debug Diagnostic Toolはダンプを残すことなく、起動時にクラッシュします。
デバッグツールが互いに阻害しあわないように、以下のレジストリキーの削除を推奨します:
- HKEYLOCALMACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
- HKEYLOCALMACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps