gpt4 book ai didi

java - 检测 Java 类以创建反向 Java 调试器的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 12:00:56 28 4
gpt4 key购买 nike

我想为 Java 创建一个反向调试器(一个可以在程序执行中倒退的调试器),为此我需要在程序执行的同时存储变量数据。我将为此使用全局缓存和更新缓存的静态方法。

我想以这样的方式检测加载的类,在每个字段/变量修改后,我的静态方法将被调用:例如:

public static void updateCache(String fullVarName, Object value){...}

我观察到的是,当一个字段被更新时,一个 putfield指令被执行。当局部变量被更新时, (I)STORE指令被使用。所以我想到了检测类,每当发现这样的操作码时,我只需插入另一个 getfieldILOAD之后,要获取更新的字段/变量的值,然后我使用 invokestatic使用所有必要的信息调用我的静态方法。

问题是还有其他用例,其中变量是集合或数组,并且它们使用特定方法更新,例如更新 HashMap 时。与 map.put(key, value) .所以我也需要拦截这些调用,但是有很多这样的方法,我需要找到它们并对其进行硬编码......
有解决方法吗?或者也许我遗漏了一些东西,有一个更简单的解决方案。

编辑:我之前也研究过 JVMTI 并运行了一些基准测试。对于我的用例来说,它似乎太慢了,例如给我的程序增加了 7-100 倍的减速.....

最佳答案

如果您的目标只是获得反向调试的可能性,您可以尝试 Jive ( https://cse.buffalo.edu/jive/ )。它可以与 Eclipse 一起使用。

但如果你的目标是自己创建一个反向调试工具,这篇文章可能会对你有所帮助:https://www.researchgate.net/publication/220093333_Back_to_the_Future_Omniscient_Debugging

关于java - 检测 Java 类以创建反向 Java 调试器的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61803557/

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