30

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

BCEL を調べ始めましたが、コール グラフ トレースが組み込まれていないようです。オーバーロード、型シグニチャ、ポリモーフィック ディスパッチを適切に行うのは難しいかもしれないので、自分で書くのをためらっています。

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

PS: 既存の質問「Java コール グラフを生成する方法」が見つかります。同じように聞こえますが、私が必要としているものではありません。

4

7 に答える 7

8

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

于 2012-05-18T08:09:28.707 に答える
6

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

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

于 2011-10-26T19:43:35.770 に答える
6

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

于 2012-01-30T10:35:14.337 に答える
5

すすを使用すると、探しているものを簡単に実現できるはずです: http://www.sable.mcgill.ca/soot/

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

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

また、Soot の有効なメーリング リストもあります。

于 2011-03-06T12:16:55.763 に答える
2

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

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

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

于 2011-03-06T08:54:48.670 に答える