gpt4 book ai didi

java - 测试分配功能

转载 作者:搜寻专家 更新时间:2023-11-01 02:12:05 24 4
gpt4 key购买 nike

我想知道是否有测试或某种方法可以知道是否调用函数进行分配,我的意思是说出两者之间的区别...

int x = getX();

只是,

getX();

这没有任何实际用途,但我认为知道它会很好。

有可能吗?

最佳答案

是的,这是可能的,但只能通过分析编译后的程序的字节码来实现,非常不方便。可以在运行时通过获取类字节(通过 instrumentation 或其他方法)来访问字节码,然后使用第三方库进行分析,例如 ASM , BCEL , 或 Javassist .

要搜索分配给函数结果的局部变量,您需要查找以下字节码模式:

invokevirtual/static [class:method()signature]
xstore #stack

对于 int x = getX(); 的确切情况,字节码类似于:

invokevirtual [clazz:getX()I]
istore 1

当然,clazzgetX()所在的实际类,存储的局部变量(xstore) 可能会有所不同。此外,invokeXXX 调用之前会加载方法参数,包括隐式 this 实例。

总而言之,这是可能的,但并不方便,因为理解字节码不是一日之功。

关于java - 测试分配功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16877286/

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