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」をクリックしてください。
「Select Target Type」ウィンドウで「A specific process」を選択し、「Next」をクリックします。
「Select Target」ウィンドウでリストから「PhotonSocketServer.exe」を選択し、「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例外の設定が追加されたことを確認できます。
「Advanced Configuration」ウィンドウに戻り、「Next」をクリックします。
「Select Dump Location And Rule Name」ウィンドウでは、デフォルトのルール名を変更できます。任意の一時フォルダパスに「Userdump Location」を設定し、「Next」をクリックします。
「Add Rule」ウィザードは、最後のウィンドウ「Rule Completed」を開きます。「Activate the rule now」を選択し、「Finish」をクリックします。
Debug Diagnosticは、「Symbol Search Path」を
srv*c:\symcache*https://msdl.microsoft.com/download/symbols
に自動的に設定するよう指示します。指示されない場合には、スタックトレースを改善するため「Tools" -> "Options & Settings」から、手動でこの設定をおこなってください。
メインのDebug Diagnostic Toolウィンドウに戻ると、設定されたルールを参照できます。
Debug Diagnostic Toolのセットアップ: ダンプ分析
Debug Diagnostic Tool ("Debug Diag 2 Analysis")を開きます。
「Add Data Files」を使用してダンプファイルを追加します。
ダンプファイルの追加が完了したら、「分析を開始」できます。
分析が読み込まれますが、この読み込みには数分かかる場合があります。その後、ブラウザにレポートが表示されます。
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