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

标签 java deadlock bytecode

考虑以下代码片段

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

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

最佳答案

您必须使用 ASM 的 SourceInterpreter追踪值(value)从何而来,然后评估自己的值(value)是什么。

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

关于java - 使用ASM检测可能的同步死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11144980/

相关文章:

Java 线程和同步块(synchronized block)

java - 拦截私有(private)字段访问进行延迟加载

java - 是否有可能追踪到哪个表达式导致了 NPE?

java - 创建 JSESSIONID 后 tomcat 重启时正常保留值

java - 包含给出错误结果

c# - Web API 中的 ContinueWith 死锁

java - Detection of Loops in Java Bytecode - 区分后端类型

java - SOA 客户端握手错误

java - 编译错误 : Cannot us a method returning CompetionStage as a Handler for requests

Java 程序在调度并运行 TimerTask 后永远不会退出