私は、メソッドの最初の行(initメソッドとclinitメソッドを除く)にSystem.out.println()を追加しようとBCELを使用しています。Java:BCELを使用してすべてのメソッドにデバッグ呼び出しを追加
これは、(いくつかの擬似付き)私のコードの気圧のとき:
Instruction ins = null;
f (first instruction is ALOAD_0) {
ins = get next instruction
} else {
ins = this instruction;
}
list.insert(ins, new GETSTATIC(cgen.getConstantPool().addFieldref("java/lang/System", "out", "Ljava/io/PrintStream;")));
list.insert(ins, new LDC(cgen.getConstantPool().addUtf8("debug message")));
list.insert(ins, new INVOKEVIRTUAL(cgen.getConstantPool().addMethodref("java/io/PrintStream", "println", "(Ljava/lang/String;)V")));
編集したクラスは、バイトコードで正常に見えるが、何らかの理由でクラスは、この後に動作しません。私が間違っていることはありますか?
これを行うには、コードの後ろにMethodGenクラスのsetMaxStack()メソッドを追加してください。 –