gpt4 book ai didi

java - JVMTI - 如何从回调中获取方法参数的值

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:15:52 25 4
gpt4 key购买 nike

感谢 JVMTI 代理,我正在记录我的 Java 应用程序中的所有方法条目。现在,我能够获取每个方法的名称,但我希望能够获取该方法接收到的参数值。

此问题已在较早的主题中讨论过(参见 How to get parameter values in a MethodEntry callback);它完全符合我正在寻找的东西,所以我知道我必须使用 GetLocalObject 函数,但我不知道如何使用(主题中给出的示例已损坏)。

谁能帮我找出如何做到这一点?谢谢。

最佳答案

我认为您想在不预知其内容的情况下访问任意方法参数,如果不能,您能否澄清您的问题?

参见 JVMTI docs on local variables .

首先,您需要确保已在功能列表中启用局部变量访问。然后,使用 GetLocalVariableTable 找出可用的参数。返回的表将包含方法中每个局部变量的描述,包括参数。完成后不要忘记Deallocate它。

您需要确定哪些变量是参数。您可以通过找到当前的 jlocation 并消除尚不可用的局部变量来做到这一点。这不会告诉您参数顺序,但会告诉您哪些局部变量是参数。您可能会假设插槽编号是正确的顺序。

使用GetFrameLocation找到当前的jlocation,遍历局部变量表,并且对于每个start_location小于或等于的局部变量到您当前的位置,将插槽编号和类型添加到您的参数列表中。

对于每个参数,根据其类型调用适当的 GetLocal{X} 方法。您需要当前帧的深度,您已经从 GetFrameLocation 获得了该深度。

这应该会为您提供参数,但实现起来会很慢且很棘手。遵循本指南关于避免 MethodEntry 回调并改用字节码检测 (BCI) 的建议会好得多。

关于java - JVMTI - 如何从回调中获取方法参数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7041177/

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