2011-02-09 47 views
18

Javaクラスのセットをスキャンし、抽象クラスの特定のメソッドからのすべてのメソッド呼び出しをトレースし、そのコンテキスト内ですべてのコードのリストを作成します。何らかの操作を実行します(この場合、特定のクラスのインスタンスをインスタンス化します)。私は知りたい、行番号、引数を指定します。Javaコールグラフの静的解析

私はBCELを見始めましたが、コールグラフのトレースが組み込まれていないようです。私は過負荷、タイプシグネチャ、多型ディスパッチ権を得るのが難しいかもしれないので、自分自身を書くのは躊躇しています。

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

PS:同じ音色だから、既存の質問「How to Generator a Java Call Graph」が見つかります。

+1

実際には、受け入れられた回答の2番目の部分(すべての参照を見つけること)は、実際にはあなたが望むものだと思われます。 –

+0

自動処理の一部としてこれを行うコードが必要です。 –

+1

Mark、あなたはすっごくスートを使ってこれを手に入れましたか?残念ながら、メインメソッドがないクラスでは、エントリポイントを正常に設定できないため、成功しませんでした。あなたはどうやってこれに乗りましたか? – Joeblackdev

答えて

2

抽象構文と完全なシンボルテーブルへのアクセスを提供するものがほしいと思うようです。次に、抽象メソッドの各実装メソッド(シンボルテーブルで示されている)に根差したコールグラフの関数のASTのカスタムスキャンにより、その型が特定の関心クラスである新しいオペレーションを見つける機会が与えられます。

DMS Software Reengineering Toolkitは、構文解析、AST構築/ナビゲーション、シンボルテーブル構築/ナビゲーション、制御フロー、データフロー、コールグラフ構築の基本サービスを提供する汎用コンパイラ技術です。 DMSにはオプションのJava Front Endがあり、完全なJavaパーサを提供し、Java ASTとシンボルテーブルを構築し、コールグラフを構築することができます。 Javaフロントエンドは.classファイルも読み取ることができます。クラスファイルに登場したいのかどうかについても、情報を探すのは難しかったです。

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

4

すすは、あなたが簡単にあなたが探しているものを達成できるようにする必要があります。 http://www.sable.mcgill.ca/soot/

それは完全に自動的に正確なコールグラフを構築することができます。

あなたがここにすべての必要なドキュメントを見つけることができます。 http://www.sable.mcgill.ca/soot/tutorial/index.html

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

+0

私はapkからジムプルを持っていますが、コマンドラインを使ってコールグラフを構築することはできません。ヘルプが必要です。 –

4

JavaDependを試すと、依存関係やメトリックに必要な多くの機能を提供します。また、SQLベースのCQLを使用してコードベースを要求します。

5

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

関連する問題