【发布时间】:2018-04-20 04:58:32
【问题描述】:
我正在处理一个相当老的 Java Ant 项目,该项目已导入 IntelliJ,它之前是使用 Eclipse 开发的。该项目由少量 servlet 组成。我正在尝试从 IntelliJ 进行调试。 IntelliJ 可以连接到端口 8000 上的远程 Tomcat,但是当我尝试添加断点时,我收到以下可怕的错误:
com.package.blah.SomeClass 类中没有行号信息
根据关于 SO 和其他地方的建议,我将我的 Ant 构建脚本修改为以下内容:
<target name="compile" depends="web-skeleton">
<ant dir="${deployment-wizard.dir}" target="uberjar"/>
<javac debug="true" debuglevel="lines,vars,source" srcdir="${src.dir}"
destdir="${build.dir}/WEB-INF/classes" classpathref="project.class.path"/>
</target>
我将debug 和debuglevel 行添加到上述调用javac 的目标中。另外,我尝试运行javap -v SomeClass.class,我看到如下内容:
line 94: 418
line 97: 433
line 98: 443
LocalVariableTable:
Start Length Slot Name Signature
343 22 13 decrypted Ljava/lang/String;
370 11 13 e Ljava/lang/Exception;
244 189 7 keyParam Ljava/lang/String;
255 178 8 userParam Ljava/lang/String;
266 167 9 environmentParam Ljava/lang/String;
我不知道这是否意味着字节码包含行号,但它肯定是这样出现的。
我还尝试从头开始清理和重建,并从 IntelliJ 执行无效缓存/重新启动。
我希望有人可以在这里提供一些帮助。作为最后的手段,我可以尝试将其移植到 Maven 项目中,但除非绝对必要,否则我宁愿避免这样做。
【问题讨论】:
-
添加调试选项后,您是否尝试过清理/重建项目?
-
是的,我已经超越了这一点,甚至在 IntelliJ 中进行了无效缓存、清理、重新启动。我放弃了...我花了一个下午将它移植到一个 Maven 项目,该项目现在使用断点运行 :-)
-
我强调了我的案例中缺少的属性。很容易被忽视。在编译目标中添加调试和调试级别后,问题得到解决。谢谢。
标签: java intellij-idea ant breakpoints bytecode