gpt4 book ai didi

java - StackOverflowError,无法在我的代码中找到调用的位置

转载 作者:行者123 更新时间:2023-12-04 11:25:46 33 4
gpt4 key购买 nike

我在 Java 中有一个 StackOverflowError,它没有告诉我我自己的代码中的任何一行,堆栈跟踪的相关部分是:

java.lang.StringBuilder.append(StringBuilder.java:132)
java.util.AbstractMap.toString(AbstractMap.java:523)
java.lang.String.valueOf(String.java:2838)
java.lang.StringBuilder.append(StringBuilder.java:132)
java.util.AbstractCollection.toString(AbstractCollection.java:439)
java.lang.String.valueOf(String.java:2838)

我已经尝试从 throwable 获取堆栈跟踪,但由于某种原因它不包含相关节点,我试图在我的代码中找到一些关于错误位置的切入点。我也尝试将堆栈大小减小到 128k 以更早地得到错误,但无济于事。

最佳答案

对于 StackOverFlowError ,堆栈跟踪经常被截断(因为它太长),这对查找错误没有多大帮助。

在您的情况下,假设您复制的部分是重复的部分,看起来您将 map 添加到集合中,而集合又是原始 map 的键或值,然后使用 toString()这些对象之一的方法。

map (在 AbstractMap 中)的 toString() 的默认实现然后使用其所有键和值调用 StringBuilder.append(...),这反过来将在这些键和值上调用 toString。对于AbstractCollection,同样适用于集合的元素。

(Jon 的回答中的示例用两个集合而不是 map 和集合做了类似的事情。)

解决方案:

  • 删除集合/ map 图中的循环。
  • 如果您的 Collection/ map 图表中需要循环:
    • 避免调用 toString()(以及 hashCode/equals),或者
    • 覆盖其中之一的 toString() 方法以打破循环。

关于java - StackOverflowError,无法在我的代码中找到调用的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847616/

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