
Stoatは、プログラム/ライブラリのCallgraphについてプロパティを主張するツールです。このツールの主な使用法は、混合コードベースの一部でハードリアルタイム操作を実行する必要があるプログラムを分析することです。これは、リアルタイムでなければならない既知のルート関数から呼び出される可能性のあるすべての機能を識別することによって行われます。この推移的な閉鎖で任意の時間をブロックできる危険な関数が見つかった場合、エラーが発生し、不適切な動作がどこにあり、どのバックトレースが呼び出されるかを示します。
C/C ++で大きなコードベースを維持することにより、どのコードが他のルーチンを呼び出すかを知ることを非常に困難にすることができます。これは、実装ではまったく明確ではない可能性のある1つのコードベース内にいくつかの分離がある場合、さらに複雑です。これは、仮想過負荷、オペレーターの過負荷、多発性継承、暗黙的な変換など、いくつかのC ++技術の不透明度によってさらに複雑になります。
LLVM 3.3+
Clang 3.3+
C ++ Filt
ルビー
Callgraphレンダリング用のGraphViz GEM(オプション)
色付きの出力のために宝石(オプション)を着色します
git clone https://github.com/fundamental/stoat && cd stoat
mkdir build && cd build
cmake .. && make && make test
make install # or just run in placeインライン安全マーカー__attribute __((annotate( "realtime"))))
インラインハザードマーカー__attribute __((annotate( "non-realtime"))))
ライン外のホワイトリスト/ブラックリスト
ライン外の抑制ファイル
安全または矛盾するグラフのグラフ機能
Librtosc内の派遣ツリー分析のサポート
__attribute __((annotate( "realtime")))でルートリアルタイム関数に注釈を付けます)
CC = stoat-compile cxx = stoat-compile ++ですべてのファイルをコンパイルするか、Clangの-emit-llvmフラグでファイルをコンパイルするだけです
-recursiveオプションを使用して、結果のLLVM IRファイルでSTOATを実行します
矛盾を表示します
オプションで-Gオプションを使用して分析をやり直して、矛盾をグラフィカルに表示します
コード、ホワイトリスト、または抑制リストを更新します
より安全なコードをお楽しみください
より明確なガイドについては、http://log.fundmental-code.com/2014/08/15/stoat-tutorial-example.htmlのチュートリアルをご覧ください。
STOATはGPLV3ライセンスの下で入手できます