【问题标题】:Source code doesn't match byte code IntelliJ 15 while debugging调试时源代码与字节码 IntelliJ 15 不匹配
【发布时间】:2017-06-29 19:36:01
【问题描述】:

在 IntelliJ 中调试 Java 代码时遇到问题。

我已连接到远程服务器,正在使用 Maven 构建我的项目,并且项目正在正确构建,多次验证。

每次插入调试点时,IntelliJ 都会返回错误消息“此时没有可执行代码”。插入一些断点后,IntelliJ 在执行“source code doesn't match byte code”时返回错误消息。

各种链接中提供的尝试过的解决方案,例如:使用同步选项、使缓存无效、重建等。

【问题讨论】:

  • 你确定你在IDE中的源代码与远程JVM中加载的类相对应吗?可能是您在类路径中有一些额外的 jar,其中旧的类版本覆盖了较新的版本,或者代码是在没有调试信息的情况下构建的,或者某些注释处理器或混淆器在构建过程中更改了目标类。
  • 有时当您在 maven 中拥有更新版本的项目,但本地版本已过时时会发生这种情况。试试Settings->Maven->Reimport project 看看会发生什么。
  • Anton,我试过你提到的,虽然我没有看到选项重新导入项目,但启用了选项总是更新快照。但是没有成功。之前我在 IntelliJ 的一个窗口中打开了在同一个 repo 中构建的多个项目,现在我尝试打开单个项目,也没有成功。
  • @CrazyCoder,我查看了您的建议并在我的 JVM 中反编译了 jar,并将其与我的源代码进行了比较。我发现有一个不匹配,然后我检查了源代码的 git 分支和 JVM 中存在的代码,它是同一个 repo 的不同 git 分支。

标签: java intellij-idea


【解决方案1】:

您需要绝对确保您在 IDE 中拥有的源代码与远程 JVM 中加载的类相对应。

可能是您的类路径中有一些额外的 jar,其中旧的类版本覆盖了较新的版本,或者代码是在没有调试信息的情况下构建的,或者某些注释处理器/混淆器在构建过程中更改了目标类。

使用javap 或反编译器可以帮助检测不同步的类。

正如您在评论中提到的,在服务器上运行的代码与您在 IDE 中的代码来自不同的 git 分支。这可以通过在 IDE 中重建项目并将实际代码部署到服务器来避免。

【讨论】:

  • 是否可以通过 IntelliJ IDEA 远程调试从服务器获取字节码?
  • @rilaby 不,这是不可能的。
猜你喜欢
  • 2017-02-20
  • 2018-01-30
  • 1970-01-01
  • 2020-12-12
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多