LogAdderはJavaの各メソッドの先頭にトレース用のログを埋め込むことができるオープンソースソフトウェア。
下記の順にメソッドが実行されるJavaのソースがあったとする。
public static void main(String[] args){ step1() step2() step3() } public static void step1(){ } public static void step2(){ } public static void step3(){ }このソースコードに対してLogAdderを実行すると、下記のようにトレースが追加される
public static void main(String[] args){ System.out.println("I'm at " + new Exception().getStackTrace()[0].toString()); step1() step2() step3() } public static void step1(){ System.out.println("I'm at " + new Exception().getStackTrace()[0].toString()); } public static void step2(){ System.out.println("I'm at " + new Exception().getStackTrace()[0].toString()); } public static void step3(){ System.out.println("I'm at " + new Exception().getStackTrace()[0].toString()); }そして、このログ追加済みのソースコードを実行すると、下記のような標準出力が出される。
I'm at com.github.kentan.logadder.sample.data.Sample1.main(Sample1.java:6)
I'm at com.github.kentan.logadder.sample.data.Sample1.step1(Sample1.java:14)
I'm at com.github.kentan.logadder.sample.data.Sample1.step2(Sample1.java:19)
I'm at com.github.kentan.logadder.sample.data.Sample1.step3(Sample1.java:24)
これを見ると、ログ(この場合は標準出力)を見ることによって、実行順序がわかる。
私がこれを作ったきっかけは、非常に大規模なプロジェクトで、マルチスレッド、キューイング
メッセージングが多用されたソースコードを解析する必要があったためだ。
そのようなソースコードでは手続き型言語を読むように、ただ呼び出しを追っていくだけで解析を進めることは非常に難しい。同じようなソースを読む必要に遭遇したとき、本ライブラリは大いに役立つとと思う。
0 件のコメント:
コメントを投稿