4

もちろん、コンパイル時にその情報がわかっている場合は、バイトコードを調べて、割り当てられている配列のサイズを確認したいと思います。

背景:FindBugs検出器(コンパイルされたバイトコードを調べる)を作成し、配列割り当ての特定の発生を報告したいと思います。誤検知を除外するために、私は「小さな」配列には関心がありませんが、コンパイル時にサイズが利用できないか、構成可能なしきい値よりも大きい配列にのみ関心があります。

FindBugsのソースコードはあまり文書化されていないので、始める方法についてのいくつかの指針を探しています-おそらく、私が見ることができるのと同じようなことをしている検出器がすでにあるでしょう。

4

2 に答える 2

2

これはちょっとトリッキーになるかもしれません。私の知識は不完全ですが、注意すべき少なくとも3種類の指示(NEWARRAY、ANEWARRAY、およびMULTIANEWARRAY)があります。前の命令(またはMULTIANEWARRAYの場合はn個の前の命令)を見ると、サイズが取得されます。これは、定数であったとしても、サイズに応じてBIPUSH、SIPUSH、またはLDC(他に何か?)がロードされる場合があります。お気づきのように、クラスが計算の結果である場合は、命令を無期限にトレースしている可能性があります。

私の記憶が正しければ、FindBugsは内部でBCELを使用していますが、それらがどれほど巧妙であるかを正確に確認するために、そこを掘り下げたことはありません。それらのチームのいずれかが適切なメーリングリストを持っている場合、彼らは尋ねるのに良い場所を証明するかもしれません-彼らはおそらく誰かが以前にこの道を進んでいたかどうかを少なくとも知っているでしょう。

于 2009-06-15T14:28:38.413 に答える