カスタムクラッシュグループ化
注釈:本資料はAI技術を用いて翻訳されています。
概要
AccelByte Development Toolkit(ADT)のカスタムクラッシュグループ化により、複数のクラッシュイベントを1つのクラッシュイシューにグループ化することで、クラッシュレコードを管理できます。この機能を使用すると、同一のコールスタック行を持つクラッシュイベントがグループ化されます。これにより、開発者は同じ根本原因を持つバグを修正できます。
ADTのカスタムクラッシュグループ化は次のことに役立ちます:
- 同一のコールスタック行の範囲を最小1から最大30まで設定します。
- コールスタックの特定の行を無視し、コールスタックリストから省略します。
クラッシュグループ化は新しいクラッシュにのみ適用されます。
コールスタック行の範囲を設定する
コールスタック行の範囲を設定するには、以下の手順に従ってください:
- ADT Webにログインします。
- サイドバーからGame Settingsメニューをクリックします。
- Global Crash Configs設定を開き、Crash Groupingセクションまでスクロールします。
- **+アイコンをクリックして増やし、-**をクリックして一致させる行数を減らします。
- Save Changesボタンをクリックして変更を保存します。
- 確認ポップアップでConfirmボタンをクリックします。
コールスタック行を無視する
カスタムルールを設定すると、システムはコールスタックを無視し、Call stackタブに表示されなくなります。
無視ルールを設定するには、次の手順に従います:
- ADT Webにログインします。
- サイドバーからGame Settingsメニューをクリックします。
- Global Crash Configs設定を開き、Crash Groupingセクションまでスクロールします。
- Add Ruleボタンをクリックします。
- Platform列をクリックします。
- ドロップダウンから利用可能なプラットフォームを選択します。
- ゲームモジュールのコード(例:
LyraGame)でモジュールを入力します。 - 無視するメッセージ(例:
UEngine::PerformError*)を入力します。末尾の*は重要です。パターン構文を参照してください。 - Save Changesボタンをクリックします。
- 確認ポップアップでConfirmをクリックします。
無視ルールを記述する
コールスタックは解析され、クラッシュに含まれます。コールスタックには、関数、場所、行番号が含まれます。コールスタックの無視ルールは3つのコンポーネントで構成されます:
-
Platform:ビルドのプラットフォーム。ゲームプラットフォームに応じて選択します。ドロップダウンには、ビルドのアップロードされたプラットフォームのみが表示されます。
-
Module:コードアドレスを含むゲームの実行可能モジュール。
-
Message:クラッシュ情報としてモジュールから送信される例外メッセージ。

コールスタックの各フレームは、module!message という形式の関数文字列を持ち、感嘆符(!)で区切られています。! より前の文字列がモジュール、! より後ろの文字列がメッセージです。! 文字がない場合、文字列全体がモジュールとして扱われ、メッセージは空になります。
ルールがコールスタック行に一致するのは、3つのコンポーネントすべてが一致した場合のみです(Platform AND Module AND Message):
"Platform: windows" AND "Module: LyraGame" AND "Message: UEngine::PerformError*"
パターン構文
Module と Message には glob(ワイルドカード)パターンを指定します。正規表現ではありません。
パターンはファイルパスではなくフラットな文字列と照合されるため、ディレクトリやパス区切り文字に関する動作はありません。* は : や . を含む任意の文字に一致します。
すべてのパターンには、次の2つの規則が適用されます:
- パターンは値の一部ではなく、値全体に一致する必要があります。 パターンは、モジュールまたはメッセージの文字列全体と比較されます。
UEngine::PerformErrorは、フレームUEngine::PerformError(wchar_t const*, FOutputDevice&)には一致しません。フレームの末尾に余分な文字があるためです。前方一致させるには、末尾に*を追加してUEngine::PerformError*としてください。 - 一致は大文字と小文字を区別しません。
LyraGame、lyragame、LYRAGAMEはすべて同等に扱われます。
サポートされているワイルドカードは次のとおりです:
| パターン | 一致する対象 | 例 |
|---|---|---|
* | 0文字以上の任意の文字列 | UEngine::* は UEngine::PerformError() に一致します |
? | 任意の1文字 | ?yraGame は LyraGame と MyraGame に一致します |
[a-f] | 指定した範囲内の1文字 | [AIUEO]Engine は UEngine に一致します |
[!a-f] | 指定した範囲に含まれない1文字 | [!L]yraGame は LyraGame に一致しません |
{a,b} | カンマ区切りの候補のいずれか1つ | {Lyra,Shooter}Game は LyraGame に一致します |
したがって次のルールは、モジュールが任意の1文字に続いて yra、さらに任意の文字列が続くフレームで、かつメッセージが A、I、U、E、O のいずれかに続いて Engine::Perform で始まるフレームを無視します:
"Platform: windows" AND "Module: ?yra*" AND "Message: [AIUEO]Engine::Perform*"
正規表現の構文はサポートされていません。正規表現で特別な意味を持つ文字(.、+、|、^、$、(、) など)は、そのままの文字として一致します。これはC++のシンボルで特に重要です。メッセージ UEngine::PerformError() は、メッセージが括弧を含めて厳密に UEngine::PerformError() であるフレームにのみ一致します。実際のフレームには引数リストが含まれるため、UEngine::PerformError* を使用してください。
! はモジュールとメッセージを区切る文字であるため、! を含む Message パターンは一致することがありません。
{} 内のカンマの後にスペースを入れないでください。スペースはそのままの文字として一致するため、{Lyra, Shooter}Game は LyraGame には一致しますが、ShooterGame には一致しません。最初の候補では引き続き一致するため、見落としやすい点です。
また、角かっこが閉じられていることを確認してください。閉じられていない [ は無効なパターンです。
FAQ
Q: コールスタック行の値を30に設定するとどうなりますか?
A: システムは、まったく同じ30行のコールスタックを持つクラッシュのみをグループ化します。15行目だけが異なる場合でも、別のクラッシュイシューにグループ化されます。
Q: メッセージ値を空のままにするとどうなりますか?
A: システムは、モジュールをメイン値として持つコールスタック行のみを検索します。
"Platform: windows" AND "Module: LyraGame"
無視されるコールスタックは、追加のメッセージなしでLyraGame!になります。