どーも。違いのわからない男、shigemk2です。例にもれず、javapのオプションの違いがあまり良く分からなかったので、あれこれ手を動かしながら調べてみました。
-cオプション
クラスの各メソッドのために逆アセンブルされるコード、すなわち Java バイトコードから成る命令を表示します。
-vオプション
別名--verbose
メソッドのスタックサイズ、および locals と args の数を出力します。
-pオプション
たぶん別名--private
その違い
manでも上のドキュメントでもまあ情報は手に入るけど、オプションcとvの違いがよく分からなかったので比べてみた。
サンプルコード
オプションなし
逆アセンブル結果も何もない味気ないコード。 gist.github.com
-pだけ
逆アセンブル結果は何もないけど、とりあえずprivateメソッドが追加されてる。 gist.github.com
-cだけ
どうも、privateメソッドの逆アセンブルはできていない様子。 gist.github.com
-vだけ
メソッドのスタックサイズ、および locals と args の数を出力します、と書いてあるけど、何気に逆アセンブル結果も出ている。だけでなく、まえがきや定数プールも出力されている。なお、privateメソッドの逆アセンブル結果は出てない。
-cと-p
cオプションで出てきた逆アセンブル結果に加えて、privateメソッドの逆アセンブル結果も、出る。でも定数プールとかは出ない。
-pと-v
vオプション単体にprivateメソッドの逆アセンブル結果などが出てくる。
-cと-v
vオプション単体と変わらない。。
-cと-pと-v
pオプション+vオプションと変わらない。
まとめ
微妙な違いがわかったので、とりあえず、pとvを基本で使いつつ、要所要所でcだけを使うといいと思いました。cとvを重ねがけするのは意味がないのでした。