使用ASM检测可能的同步死锁

时间:2012-06-21 19:02:11

标签: java deadlock bytecode

请考虑以下代码段

synchronized (A.class) {
  foo();
  synchronized (B.class) {
    bar();
  }
}

交换A和B的另一个代码。这可能会导致死锁,我正在尝试使用ASM检测到这一点(特别是,我只检测A,B是否是我知道不应该同步的类,例如异常)。目前,我有一个使用SimpleVerifier的Analyzer。使用它,我可以在堆栈顶部获取BasicValue并获取其类型,但在代码示例中,内部名称将是java / lang / Class,它不会告诉我它是哪个类。我似乎无法找到一种简单的方法来查找该类所代表的类。任何帮助是极大的赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

您必须使用ASM的SourceInterpreter来追踪值的来源,然后评估自己的价值。

PS:BTW,同步一个班级是一个坏主意......