Java 使用ASM检测可能的同步死锁
考虑下面的代码片段Java 使用ASM检测可能的同步死锁,java,deadlock,bytecode,Java,Deadlock,Bytecode,考虑下面的代码片段 synchronized (A.class) { foo(); synchronized (B.class) { bar(); } } 和另一个A和B互换的代码。这可能会导致死锁,我正在尝试使用ASM检测这一点(特别是,我只检测A、B是否是我知道不应该同步的类,例如异常)。目前,我有一个使用简化器的分析器。使用它,我可以获得堆栈顶部的BasicValue并获得它的类型,但是在代码示例中,内部名称是java/lang/Class,它不能告诉我它是哪个类。我
synchronized (A.class) {
foo();
synchronized (B.class) {
bar();
}
}
和另一个A和B互换的代码。这可能会导致死锁,我正在尝试使用ASM检测这一点(特别是,我只检测A、B是否是我知道不应该同步的类,例如异常)。目前,我有一个使用简化器的分析器。使用它,我可以获得堆栈顶部的BasicValue并获得它的类型,但是在代码示例中,内部名称是java/lang/Class,它不能告诉我它是哪个类。我似乎找不到一个简单的方法来确定这个类代表哪个类。非常感谢您的帮助。谢谢 您必须使用ASM跟踪价值的来源,然后评估自己价值是什么
PS:顺便说一句,在类上同步是个坏主意…你是在看静态分析还是动态分析?他甚至可能想编写自己的解释器,在更高级别的抽象(例如聚合表达式)上进行操作。