Java 特定jvm字节码模式的grep

Java 特定jvm字节码模式的grep,java,coding-style,jvm,bytecode,java-bytecode-asm,Java,Coding Style,Jvm,Bytecode,Java Bytecode Asm,我正在从事一个遗留java项目,该项目有许多设计问题。因此,代码的某些部分的行为与预期不符。考虑下面的代码: public enum Parent{ PARENT1(CHILD1, CHILD2), PARENT2(CHILD3, CHILD1), PARENT3(CHILD4, CHILD2) private Child [] children; Parent(Child ...children) { this.children = children; }

我正在从事一个遗留java项目,该项目有许多设计问题。因此,代码的某些部分的行为与预期不符。考虑下面的代码:

public enum Parent{
    PARENT1(CHILD1, CHILD2), PARENT2(CHILD3, CHILD1), 
    PARENT3(CHILD4, CHILD2)

    private Child [] children;
    Parent(Child ...children) { this.children = children; } 

    public Child [] getChildren() { return this.children; }
}

public enum Child{ CHILD1, CHILD2, CHILD3, CHILD4  }
现在,从上面的代码中,您可以清楚地看到getChildren()返回对数组的引用。因此,可以这样更改阵列的元素:

   Child [] childrenOfParent3 = Parent3.getChildren();
   childrenOfParent3[0] = null;  //badcode
一些代码正在执行上述操作,我很难找到它(grep没有帮助)

是否有任何工具可以帮助我使用jvm字节码分析来定位这个模式(坏代码),或者您将如何做到这一点

注意:由于某些限制,我无法更改父实现


谢谢

能够检测。

能够检测。

您可以使用将所有字节码转换为源代码,然后您应该能够找到一个正则表达式来匹配所讨论的代码(或者使用FindBugs?)。

您可以使用将所有字节码转换为源代码,然后,您应该能够找到一个正则表达式来匹配所讨论的代码(或者使用FindBugs?)。

我们在这里讨论的实例有多少?像Eclipse调试器这样的工具允许数据观察点(例如:object modified)。这将导致调试器在修改相关对象的代码行上立即停止。唯一的诀窍是你需要在对象创建时设置一个断点,这样你就可以识别出你想要观看的对象。

我们这里讨论的实例有多少?像Eclipse调试器这样的工具允许数据观察点(例如:object modified)。这将导致调试器在修改相关对象的代码行上立即停止。唯一的诀窍是在创建对象时需要设置断点,以便识别要监视的对象。

我以前使用过findbugs。问题是,它列出了所有这些违规行为。我想在我们的源代码中特别查找赋值。避免意外设置这些数组的一种方法是确保您从一开始就不会返回它们-通过返回副本,等等。是的,这就是我最后要做的,但我仍然想知道源代码的哪一部分在做这件事。我以前使用过findbugs。问题是,它列出了所有这些违规行为。我想在我们的源代码中特别查找赋值。避免意外设置这些数组的一种方法是确保您从一开始就不会返回它们-通过返回副本,等等。是的,这就是我最后要做的,但我仍然想知道源代码的哪一部分在这样做。你能用这种方式包装父实现并分发子实现的副本吗?你能用这种方式包装父实现并分发子实现的副本吗?我们的一位客户在安装时报告了NPE,并进行了深入挖掘,我发现其中一个元素被取消了。。因此,eclipse调试器被排除在外。我们的一位客户在安装时报告了NPE,深入挖掘后,我发现其中一个元素被取消了。。因此,eclipse调试器被排除在外