web-dev-qa-db-ja.com

Javaコールグラフの静的分析

私がやりたいのは、一連のJavaクラスをスキャンし、抽象クラスの特定のメソッドからのすべてのメソッド呼び出しをトレースし、そのコンテキスト内で、すべてのコードのリストを作成することです。いくつかの操作を実行します(この場合、特定のクラスのインスタンスをインスタンス化します)。知りたいのは、行番号と指定された引数です。

BCELを見始めましたが、コールグラフトレースが組み込まれていないようです。オーバーロード、型シグネチャ、およびポリモーフィックディスパッチを正しく取得するのは難しい場合があるため、自分で作成することを躊躇しています。

ツールやサンプルコードが存在することを半分期待していましたが、まだ何も見つかりませんでした。車輪の再発明をしようとしているような気がします。しかし、私がそうするなら、それはオープンソースホイールになり、GitHubで利用可能になります;-)

PS:既存の質問 " How to Generator a Java Call Graph "、同じように聞こえますが、私が必要としているものとはまったく異なります。

25
Mark Renouf

Java-callgraph ツールスイートを使用して、Java用の十分に正確な静的および動的コールグラフを作成できます。

7

DoxygenGraphviz を使用できます。インストールと使用は簡単です。

5
metdos

JavaDepend を試すことができます。これは、依存関係とメトリックに必要な多くの機能を提供し、コードベースを要求するSQLのようなCQLも提供します。

開示:これは商用ソフトウェアです。

煤はあなたが探しているものを簡単に達成することを可能にするはずです: http://www.sable.mcgill.ca/soot/

正確なコールグラフを完全に自動的に作成できます。

必要なすべてのドキュメントはここにあります: http://www.sable.mcgill.ca/soot/tutorial/index.html

また、Sootのアクティブなメーリングリストがあります。

4
Eric

抽象構文と完全なシンボルテーブルへのアクセスを提供するものが必要なようです。次に、抽象メソッドの各実装メソッド(シンボルテーブルで示される)をルートとするコールグラフ内の関数のASTのカスタムスキャンにより、対象の特定のクラスのタイプを持つ新しい操作を見つける機会が得られます。

DMS Software Reengineering Toolkit は、解析、AST構築/ナビゲーション、シンボルテーブル構築/ナビゲーション、制御フロー、データフロー、およびコールグラフの基本サービスを提供する一般化されたコンパイラテクノロジです。構築。DMSにはオプションの Javaフロントエンド があり、完全なJavaパーサーを提供し、Java ASTとシンボルテーブルを構築し、コールグラフを作成します。Javaフロントエンドは.classファイルも読み取ることができます。情報を探して、クラスファイルにアクセスするかどうかも明確ではありませんでした。

あなたが望む答えは、既成のものではありません。最初の段落のアイデアを実装するには、カスタムコードを作成する必要がありますが、DMSはほとんどの原材料を提供できます。 .classファイルからの詳細はあまり提供されません(これらは主にソースコードの型を解決するために使用されます)。

2
Ira Baxter

'最近の' Eclipseインストール(質問に関連して)については、 Certiv CallGraph を参照してください。

CallGraphを使用すると、プログラムの呼び出し関係とフローの順序付けをグラフィカルに分析できます。また、拡張クラス継承階層の探索も可能にします。

コールパス分析とクラス階層の解決は、JDTプラットフォームの検索とコール階層のメカニズムを使用して実行されます。

シーケンス図は、選択したクラスまたはメソッドのJDTプラットフォームASTの静的分析から生成されます。

グラフィック視覚化エンジンとしてZestを使用します。

Eclipseマーケットプレイスからインストールできます。私はこれを作ることに関与していません。ズームアウトすることはできませんが、これはあまり実用的ではありませんが、シーケンス図をサポートしています。これは、必要に応じてノードを開いたり閉じたりして、さらに掘り下げることができます。

要件:

Eclipse 4.6 (Neon) on Java 8 VM
Eclipse Zest Visualization Toolkit 1.7

Eclipse Public License v1.0

0