【问题标题】:What could cause "Unable to install breakpoint" issue running a webapplication with mvn tomcat7:run-war?什么可能导致使用 mvn tomcat7:run-war 运行 Web 应用程序时出现“无法安装断点”问题?
【发布时间】:2016-10-31 03:46:52
【问题描述】:

开始失去理智,我要振作起来在这里写一个合适的问题..

我不知道为什么或我做了什么,因为我没有改变任何应该影响这一点的东西,但突然之间我得到了这个:

由于缺少行号属性,无法在 com.company.whatever.MyObjectService$$EnhancerBySpringCGLIB$$e3b7e123 中安装断点。

或截图:

是的,我已经在“偏好设置”下进行了检查,并遵循了 here 的建议。

我不知道为什么,但我最近被这样的错误困扰 - 让我无法完成我需要完成的实际工作..

这是我的 Maven 命令:

mvn tomcat7:run-war -am -pl mz-web-server -Dpackage-mode=dev -Denv=dev  -DskipTests

到底是什么原因?

是的,我有

  • mvn clean install
  • 打开/关闭 Eclipse
  • 刷新项目浏览器
  • 查看了首选项 --> Java --> 编译器 --> 类文件生成
  • ... 还有:取消设置、应用、再次设置、申请行号信息选项
  • 使用 JDK 而不是 JRE
  • 与上帝交谈,甚至想过改变我的职业

但没有任何帮助!

【问题讨论】:

  • com.company.whatever.MyObjectService$$EnhancerBySpringCGLIB$$e3b7e123 看起来像 CGLIB 生成的类,即动态生成的字节码。 maven 和 IDE 选项都不可能对您有所帮助,因为该类可能没有任何 Java 源代码。

标签: java eclipse maven tomcat


【解决方案1】:

您声明您使用 maven,因此您在 IDE 中的选项在这里不太可能有很大帮助。 相反,您很可能应该专注于 maven 或更具体地说是构建插件。

确保您已启用debug 模式并使用正确的level

例如:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <debug>true</debug>
                <debuglevel>lines,vars,source</debuglevel>
            </configuration>
        </plugin>
    </plugins>
</build>

【讨论】:

    【解决方案2】:

    我通常对 Jboss 有这个问题。

    当我被它卡住时,我只需清理我的部署目录并重新部署我的 war/jar,一切正常。

    您也可以尝试“丑陋”的替代方案并尝试远程调试您的应用程序。

    【讨论】:

      【解决方案3】:

      我猜你已经尝试过所有这些情况,但今天我在尝试调试部署在 Tomcat 6 中的带有 JDK 1.6 的“旧”且有点混乱的 Spring 应用程序时遇到了问题。

      经过多次检查:

      • 正确添加到 .class 文件的行号(通过 javap 检查 -v)。
      • 从 Eclipse/IntelliJ 正确连接到 Tomcat。
      • 为构建任务 (Ant) 添加了正确的调试和调试级别。
      • 从 IDE 和 Tomcat 中清除所有缓存,重新构建,重新部署。

      但仍然出现“缺少行号”错误。我遇到问题的项目是几年前由第三方使用 Ant 开发的。

      那有什么问题吗?

      每个 IDE 都允许您配置已编译文件的存储位置。例如,对于 Eclipse,默认文件夹是 /bin(如果是 Maven 项目,它是 /target),对于 IntelliJ,它是 /out。 我的项目正在使用 Ant 并在 ${webroot.dir}/WEB-INF/classes 之类的文件夹中编译文件(如 build.xml 文件中的编译任务所示),然后将这些 .class 文件添加到生成的战争中。

      <property name="classes.dir" value="${webroot.dir}/WEB-INF/classes" />
      <target name="compile" depends="prepare,resources">
          <javac srcdir="${basedir}/src/main/java" destdir="${classes.dir}" debug="on" debuglevel="lines,vars,source">
              ...
          </javac>
      </target>
      

      问题是 IDE 在 /bin 文件夹中查找 .class 文件,但我新编译的 .class 文件放在另一个地方。更改项目配置中的输出文件夹(Eclipse 和 IntelliJ),并指向同一个 Ant 的编译文件夹后,断点开始按预期工作。

      我知道您使用的是 Maven,而我的案例使用的是 Ant,但是在您指定输出文件夹并且与您正在使用的 IDE 中的项目配置不匹配的任何构建自动化工具中都可能出现文件夹混乱。

      希望你的理智还可以;)

      【讨论】:

        【解决方案4】:

        我只在工作场所的一个项目上工作时遇到此消息,因此我得出的结论是,由于该项目与同一工作场所的不同项目具有相同的 groupID 和文件结构/包(我试图从jdbc更改为hibernate,所以我只是复制了大部分内容)。 所以我的猜测是编译器在识别你放置断点的位置时遇到了问题,因为文件具有相同的名称和路径,所以当 SPRING 发挥作用时,编译器试图将它放在原始文件中而不是新文件中。

        更改包导致消息消失。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-19
          • 1970-01-01
          • 2015-06-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多