gpt4 book ai didi

java - 如何从 Intellij IDEA 中删除指向旧/缺失源的(幻影)断点?

转载 作者:行者123 更新时间:2023-12-01 14:09:25 25 4
gpt4 key购买 nike

使用 Intellij(v14 和现在的 v15),我设置了断点来调试来自外部依赖项(通常是快照版本)的尚未发布的类,用于在 Tomcat 7+ 中运行的 Web 应用程序。

当我将该外部依赖项更改为已发布版本时,重新编译项目并在 Debug模式下运行;即使断点不再存在于断点 ListView 中(来自菜单:运行 > 断点),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);
    }

    然后我切换到 JDK6,该行上有一个简单的右花括号 ( } )。但是,当按 CTRL+SHIFT+F8 (windows) 时,断点可用,但具有旧源文件的描述:

    breakpoints

    这让我开始思考,所以我试图找出断点的存储位置,结果它们在 <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>
    ...

    所以看起来它保留了对初始文件的引用。我不确定当您使用 maven、gradle 等时断点是否仍会出现在列表中,在这种情况下,很容易从本地存储库引用旧 jar 的路径,但此时我反正不要觉得这很重要。

    快速解决方法(也许?!) : 尽管如此,如果您手动从 xml 中删除幻像断点并保存文件,IJ 将自动获取更改并更新设置。至少在执行之后,断点不再出现在我的列表中。

    快速搜索他们的追踪器发现 this issue影响 v14.1.1(我目前在 14.1.6),它似乎还没有修复,所以我想我们只需要等到它修复(不知何故,因为现在我想不出一个简单的/体面的方式)。

    关于java - 如何从 Intellij IDEA 中删除指向旧/缺失源的(幻影)断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35584026/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com