dan*_*gpm 2 java debugging intellij-idea intellij-14 intellij-15
使用Intellij(v14和现在的v15)我已经设置了断点来调试来自Tomcat 7+中运行的Web应用程序的外部依赖项(通常是快照版本)的尚未发布的类.
当我将外部依赖项更改为已发布的版本时,重新编译项目并以调试模式运行; 即使断点列表视图中不再存在断点(从菜单:运行>断点),IntelliJ仍会暂停旧类断点的执行.
我尝试过以下方法:
对我来说唯一有用的是重新附加确切的旧源jar(只要有可能),查找受影响的类并从那里删除断点.
是否有任何不方便的方法来清除这些幻影断点?
免责声明:这可能最适合作为评论,但不适合有限数量的字符.
好抓!我之前从未遇到过这个问题,但我设法通过切换JDK版本来重现它.我只是java.io.File从JDK8 打开并在第276行设置断点:
public File(String pathname) {
if (pathname == null) { // <= breakpoint here
throw new NullPointerException();
}
this.path = fs.normalize(pathname);
this.prefixLength = fs.prefixLength(this.path);
}
Run Code Online (Sandbox Code Playgroud)
然后我切换到JDK6,它}在该行上有一个简单的右花括号().但是,当按下CTRL+ SHIFT+ F8(窗口)时,断点可用,但具有旧源文件的描述:
这让我思考,所以我试图找出断点存储的位置,结果发现它们位于<project root>/.idea/workspace.xml以下<component name="XDebuggerManager">部分:
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
...
<line-breakpoint enabled="true" type="java-line">
<url>jar://C:/Program Files/Java/jdk1.8.0_45/src.zip!/java/io/File.java</url>
<line>275</line>
<properties />
<option name="timeStamp" value="4" />
</line-breakpoint>
</breakpoints>
...
Run Code Online (Sandbox Code Playgroud)
所以看起来它保留了对初始文件的引用.当你使用maven,gradle等时,我不确定断点是否仍然会出现在列表中,在这种情况下很容易从本地仓库引用旧jar的路径,但此时我不管怎么说它不重要.
快速解决方法(可能?!):尽管如此,如果您手动从xml中删除幻像断点并保存文件,IJ将自动获取更改并更新设置.在完成之后,断点不再出现在我的列表中.
快速搜索他们的跟踪器显示这个问题影响了v14.1.1(我目前在14.1.6),这似乎还没有修复,所以我想我们只需要等到它得到修复(不知何故,因为正确现在我想不出一个简单/体面的方式).
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |