gpt4 book ai didi

Java:使用 BCEL 添加调试调用到每个方法

转载 作者:行者123 更新时间:2023-11-30 05:06:49 27 4
gpt4 key购买 nike

我正在与 BCEL 合作,尝试将 System.out.println() 调用添加到每个方法的第一行(init 和 clinit 方法除外),以查看调用哪些方法以及何时调用

这是我的代码 atm(带有一些伪代码):

    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")));

编辑后的类在字节码中看起来很好,但由于某种原因该类在此之后将无法工作。我做错了什么吗?

最佳答案

您正在推送两个参数,对于某些方法,这可能大于该方法的最大堆栈大小。您还需要调整该方法的最大堆栈大小。

如果你查看 javap 输出,你会看到

Code:
Stack=4, Locals=8, Args_size=3

对于 Stack < 2 的方法,您需要将其提高到 2。

关于Java:使用 BCEL 添加调试调用到每个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4832927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com