Unity を検索

Backtrace でゲームのエラーレポーティングを簡素化

2020年6月11日 カテゴリ: テクノロジー | 5 分 で読めます
取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

This blog was created in partnership with a third-party Verified Solutions partner to share information that may be useful to Unity users. These professional-caliber tools, plug-ins, SDKs, and other technical solutions have been reviewed and verified by Unity engineers for compatibility with Unity.

プログラマーは、新機能の開発、ゲームテスト、またはリリース後のプレイを通じて受け取るクラッシュやエラー報告を分析する時間のかかる作業を嫌になるほど行なっています。何が起こったのか、それが重要かどうかを理解するには、プログラマーと問題を見つけたプレイヤーの間で多くのやり取りが必要になります。Backtrace のエラー管理プラットフォームは、クラッシュレポートおよび例外レポートの収集と分析を自動化することを目的として構築されました。レポートの収集と分析の作業にかかる時間が半分に短縮され、プログラマーはゲームプレイに影響を与える問題の修正作業により迅速に取り掛かることができるようになります。

チームにとって、Backtrace がどのようにクラッシュやエラーを発見、分析、および解決するのに役立つのかを探ってみましょう。

何が起こったかを特定する

問題の優先順位づけをするプログラマーや管理者が最初に判断する必要があるのは、どの箇所がどのような状況で壊れたのかということです。これには、環境変数、システム情報、カスタムメタデータ、ログのエントリ、添付されたスクリーンショットやビデオなどのコンテキスト情報を含む完全なスタックトレースなど、クラッシュや例外のキャプチャを自動化する必要があります。最も診断が困難な問題は、実行中のすべてのスレッドの状態、どのモジュールがロードされたか、どのバージョンの重要なデバイスドライバーが使用されているかなどの詳細な情報を理解するために、システムランタイムのより高度な分析が必要になることがよくあります。

Backtrace は、PS4、Xbox One、Nintendo Switch のようなコンソール、Stadia のようなストリーミングサービス、PC や Mac のようなデスクトップ、iOS や Android のようなモバイルデバイス、WebGL のような Web プラットフォームなど、数多くの種類のプラットフォームに向けて、ゲームに埋め込むことができるキャプチャライブラリを提供しています。Backtrace は、Multiplay などのバックエンドプラットフォームや Docker コンテナーや Kubernetes などの技術もサポートしており、これらのプラットフォーム上で収集を設定によりオン・オフできるオプションとしています。

重要度を見極める

クラッシュに対して対応の優先順位を決めるわかりやすい方法は、クラッシュの発生頻度で分類するというやり方です。これは取り掛かりとしては正しい方法ですが、他にも以下のような考慮すべき点があります。

  • クラッシュの中には修正不能なものがある。たとえば、PC のクラッシュは古いグラフィックドライバーが原因である可能性があり、ゲームのクラッシュはエクスプロイトやアンチウイルスソフトウェアが原因である可能性がある。
  • 問題がすでに調査中である場合。その場合は、バグ追跡システムへのリンクなど、何らかの方法でその旨を伝える必要がある。
  • クラッシュの中には、ユーザへの影響が非常に小さいものもある。たとえば、メインウィンドウが閉じられてから起きるクラッシュなど。
  • 問題の中には、他の問題よりも影響が大きいものもある。リグレッションやサーバーのクラッシュなどがこのカテゴリに該当する。

Backtrace は、今何が最も重要なのかをよりよく理解するためのツールをチームに提供します。

  • 状態別の表示と管理:未対応、進行中、ミュート、解決済などのフィルターショートカットを使用して、トリアージビューでアクティビティに関連するフィンガープリントを表示します。
  • リグレッション検出:プログラマーが「バージョン x.y.z 以上で問題が再発しない限り、解決済み」などの基準を設定しておくと、問題が再発した時にシステムが問題を再び開くことができます。
  • コラボレーションと統合:ユーザーの割り当て、課題追跡システムへのリンク、コメント、およびタグを使い、調査している対象の状況の把握を容易にします。
  • チーム別のクラッシュのタグ付け:正規表現ルールを適用し、クラッシュをレンダリング、ネットワーキング、物理演算などのカテゴリのうち、単一または複数のカテゴリに属するものとしてタグ付けします。
  • フレームグラフ:問題が発生している場所の全体像をプログラマーに提示する視覚的なツールです。チームにとっては、さまざまなタイプのクラッシュの規模を視覚化するのに役立ちます。

修正方法を検討する

洗練されたデバッグ分析とレポート作成を行うために、ゲーム開発者は以下のような疑問点について調べる必要があります。

  • 障害が発生したアドレスにセットされたビットのパターンはどのようなものか。
  • プロセスのアップタイムの分布はどうか。
  • スナップショット中、最もメモリ消費量が多いものは何か。
  • グループが正規表現にマッチする属性のユニークな値は何か。
  • グループ別の特定の時期のトレースのセットについて、イベント発生のヒストグラムはどのようになっているか。

これを可能にするためには、割り込みからメモリ使用量、オープンディスクリプターに至るまで、すべてのプロセス統計を公開する必要があります。プログラマーが、アドホックな方法で独自の属性を自由に追加できる必要があり、またシステムは、何百もの次元を持つ任意の数値について、柔軟な集計機能と分析機能を提供する必要があります。

このような分析ワークロード(圧縮可能な大規模なデータセット、フルスキャンを必要とするクエリ、列の小さなサブセットをマテリアライズするクエリ)は、列指向データベースをうまく活用しています。Backtrace のシステムはこの目的のために設計されており、世界最大級のゲームスタジオで、ロバストなフォールド操作と値の分布の詳細な検討を行いながら、リアルタイムにフィードバックを収集するために使われています。

より実用的な洞察を得るために、Backtrace は命令セットおよび言語のナレッジベースと、関数の静的解析ルールを定義できるルールシステムも提供しています。ナレッジベースは、アライメント、パーミッション、ストレージ要件、フラグなど、基礎となる命令セットの制約で構成されています。これにより、チームは以下のような洞察を得ることができます。

  • アロケーターのデータ構造とポインターのフォレンジック分析によるヒープ破損の検出
  • すべてのポインターを走査し、不整合を検出するためにヒープ解析および型解析を実行する古いポインターの検出
  • 障害を起こした領域に紐付けられたコードパスの実行コードやメモリをスキャンして ROP(Return-Oriented Programming)チェーンを検出するマルウェア検出

Backtrace をゲーム開発ライフサイクルに統合することで、ゲームプログラマーは、最も診断が困難な問題を検出して解決することが容易にできるようになり、クラッシュやイベントの解決に費やす時間を半分に短縮することができます。Backtrace は Unity の検証済みソリューションパートナーです。検証済みソリューションパートナーであるということは、Unity の認証を受けて、Backtrace の SDK が最新バージョンの Unity エディターに最適化され、Unity 開発者にシームレスな体験を提供することを保証するということを意味します。無料トライアルに申し込むにはこちらをクリックしてください。Backtrace のソリューションについてさらに詳細を知りたい方は、https://backtrace.io/for/unity/ をご覧ください。

2020年6月11日 カテゴリ: テクノロジー | 5 分 で読めます

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック