背景
Backtrace には、プログラミング可能なコールスタックベースのフィンガープリントシステムが用意されています。これは、より一般的には重複排除システムと呼ばれます。重複排除システムに関する詳細情報は、こちらで確認してください。
簡単に説明すると、Backtrace ではこのシステムにより、1 つ以上の問題のあるコールスタックのコンテンツから根本原因を推測できるエラーをグループ化できます。非決定性、最適化、再帰などの理由により、同じバグでもコールスタックに違いがある場合があります。これに対応するために、Backtrace では、より正確なグループ化のために削除や変換を正規化する必要があるかどうかを判断するために、コールスタック内の各フレームを効率的に評価できる、プログラミング可能なルールベースのシステムを構築しました。Backtrace では、一般的なフレームワークやプラットフォームから追加設定なしですぐに提供される、一連のルールを開発しました(これを Backtrace ルールセットと呼びます)。
機能の概要
Backtrace の Enterprise プランをご利用のお客様は、個々のユースケースや環境に合わせて、独自のルールセットやルールを簡単に追加できるようになりました。次のような機能が含まれます。
- プロジェクトのルールセットを管理する。ルールセットは、指定されたプロジェクトに入ってくるコールスタックに対して評価され、評価用の一連のルールと、そのルールが適用される任意の言語または OS で構成されます。
- ルールセット内のルールを管理する:1 つのルールは、あるコールスタック内の指定のフレーム上で評価される可能性がある正規表現と、その式が true と評価された場合に発生する一連のアクションで構成されます。そのアクションは、関数の名前を変更する、現在のオブジェクトファイル内でフレームをスキップする、現在のフレームをスキップする、フレーム後に終了する、署名値に属性を追加するなど、広範囲に及びます。大事なのは、特定のコールスタックのさまざまな最適化やコードパスを正規化するルールを作成できるということ、オプションで特定の言語やオペレーティングシステムに限定できるということです。
- 入ってくるコールスタックに対して実行するアクションをプレビューするために、ルールセットをテストする。
機能の詳細
重複排除ルールは、「プロジェクト設定」からアクセスできます。
プロジェクトの重複排除設定
「プロジェクト設定」の下に、「重複排除」セクションが表示されます。このセクションには、プロジェクトに関連付けられている名前付きのルールセットの一覧が、実行される順番で表示されます。Backtrace ルールセットと呼ばれる、編集不可のデフォルトのルールセットが表示されます。これらは、入ってくるすべてのコールスタックに対して自動的に処理されるルールです(ソースの中身は秘密であるため、ユーザーは表示することも管理することもできません)。プロジェクトに追加のカスタムルールセットを追加して管理できます。以下のスクリーンショットは、ユーザーが指定した重複排除ルールのない状態のプロジェクトのビューです。

カスタムルールセットを作成する
「新しいルールセットを追加」ボタンを押して、新しいルールセットを作成します。

ご覧のとおり、各ルールセットは名前、ルールが適用される必要があるオプションの言語または OS のセット、有効化/無効化を切り替えるスイッチ、評価される必要があるルールのセットを追加する機能で構成されます。
ルールセット内のルールを管理する
ルールは、一連の述語(関数、オブジェクト、ソースに対して正規表現を使用して一致を評価する IF ステートメント)と、IF ステートメントが TRUE と評価された場合に実行される一連のアクションで構成されます。「ルールを追加」ボタンを押して、新しいルールを追加します。

その他のルールの例
3 つの述語と実行可能なすべてのアクションの一覧で構成される、より複雑なルールの例を以下に示します。

1 つのルールセットに 2 つのルールがあります。最初のルールには、フレームを無視してスキップする、新しい属性を設定するなど、3 つのアクションがあります。2 つ目のルールは、関数名の置換を実行する方法を示しています。

有効化と無効化
トグルメニューでルールの有効化と無効化を簡単に切り替えることができます。

ルールセットのテスト
ルールセットを作成した後は、システム内の既存のクラッシュレポート(またはエラー)を使用して、重複排除エンジンの出力をテストできます。「ルールセットのテスト」フィールドに、クラッシュレポートのインスタンス ID を入力するだけです(インスタンス ID は「デバッグ」ビューから取得できます。「ルールセットのテスト」フィールドは、ルールセットを保存した後に表示されます)。
