2011-11-09 74 views
3

我正试图切换到Intellij,但是当我加载我的项目时,调试器似乎跳过了行,并且在我试图通过时未跟踪实际源。我知道这是一个模糊的问题,但有谁知道导致Intellij在调试时不正确地链接到源代码的问题?如何解决Intellij调试问题?

+0

没见过这种行为,你尝试过一个完整的清洁和重建 –

+1

你跟踪你自己的源代码,或一些图书馆的来源问题可能是在同一个库的几个版本?类路径 –

回答

2

我能想到的唯一的事情是当前编译的类与您用来调试的源不匹配。 在这种情况下会发生什么情况是,IntelliJ(或任何其他IDE)从类中获取调试信息(例如行号),然后将其映射到您正在查看的当前源,以向您显示代码正在执行。

如果代码已过时,或版本(源代码和编译的类)以任何方式不匹配,则可能发生已调试的信息提供IDE信息以显示某一行,但该信息不正确给出当前的源代码,这可能会导致看起来像被调试的“跳跃”线路或者仅仅停留在没有多少意义的地方。

你重建了你的项目吗?那些来自Jar类的源代码,你确定这些版本匹配吗?

希望它有帮助!

+0

我同意,这可能是问题 - 我会尝试检查运行配置上的“make”复选框(“在lau之前nch“部分)用于调试 – Guillaume

+0

@pcalcao是的你的权利,我也有类似的问题回到调试器抱怨没有来源可以找到。它类似于启动调试器,然后在发生不匹配时更改一些代码。我想随着这些家伙建议构建项目,这将解决它。 – MalsR

0

您可以将IntelliJ配置为使用Eclipse java编译器,这可能会解决您的问题。从下面的链接:

https://youtrack.jetbrains.com/issue/IDEA-8021

“ 这已经不是第一次报告有关知名老javac的问题:对于一些try/catch语句和if/else语句结构,它生成若干个字节码指令,这是错误的关联所以在跳步的时候,调试器遇到不同行号的跳转指令并决定停止跳转(因为行号已经改变),javac不应该为该指令分配不同的行号

您在Eclipse中看到的行为不同,只是因为它使用了自己的编译器而不存在这个问题。如果将Eclipse配置为使用javac进行编译,请参阅所描述的行为。或者,您可以将IDEA设置为使用eclipse编译器来解决问题(仅适用于当前EAP版本 - 构建5xxx--与eclipse编译器集成)“

另请参阅关于配置Maven以使用Eclipse编译器的Q:

Using Eclipse Java Compiler (ecj) in maven builds