2

考虑以下代码片段

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

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

4

1 回答 1

2

您将不得不使用 ASM 的SourceInterpreter来追踪值的来源,然后评估自己的值是什么。

PS:顺便说一句,在 Class 上同步是一个坏主意......

于 2012-06-21T19:32:30.543 回答