プログラムのコール スタックを見て、各リターン ポインターをトークンとして扱う場合、プログラムの有効な状態の認識機能を構築するには、どのような種類のオートマトンが必要ですか?
当然のことながら、特定のバグ状態の認識機能を構築するには、どのようなオートマトンが必要ですか?
(注:この関数から取得できる情報のみを見ています。)
私の考えでは、これらが通常の言語を形成する場合、それを中心にいくつかの興味深いツールが構築される可能性があります。たとえば、一連のクラッシュ/障害ダンプが与えられた場合、それらを自動的にグループ化し、既知のバグの新しいインスタンスを識別するためのレコグナイザーを生成します。
注: これは診断ツールとしてではなく、大量のクラッシュ レポートをより便利なものに変えるためのデータ管理ツールとして提案しています。
- 「これらの 54 回のクラッシュは、42 回のクラッシュと同様に関連しているようです。」
- 「これらの新しいクラッシュは、日付 X 以前のものとは何の関係もないようです。」
- 等
私が何を達成しようと考えているのかが明確ではないように思われるので、以下に例を示します。
3 つのバグがあるプログラムがあるとします。
- 無効な引数が 1 つの関数に渡され、同じサニティ チェックをトリップさせる 2 つのバグ。
- (有効な) コーナーケースが与えられた場合、無限再帰に入る関数。
また、プログラムがクラッシュすると (アサートの失敗、キャッチされない例外、seg-V、スタック オーバーフローなど)、スタック トレースを取得し、その上の呼び出しサイトを抽出して、QA レポート サーバーに送信します。(1.プロジェクトごとに1回の費用で簡単に取得できること、2.プログラムに関する特別な知識がなくても使用できる単純で明確な意味があるため、その情報のみが抽出されると仮定しています)
私が提案しているのは、着信レポートを既知のバグの 1 つに関連するものとして (または新しいバグとして) 分類しようとするツールです。
最も単純なことは、1 つの障害サイトが 1 つのバグであると仮定することですが、最初の例では、2 つのバグが同じ場所で検出されます。次に簡単なのは、スタック全体が一致するように要求することですが、2 番目の例のように、同じバグを引き起こす可能性のある (有効な) 有効なコードが複数ある場合、これは機能しません。