debugging IntelliJ调试器卡住

dz6r00yl  于 2023-03-13  发布在  其他
关注(0)|答案(7)|浏览(263)

我正在调试一个普通的Java应用程序,没有GUI,只是大量的计算和~5次调用栈中的主线程时出现的问题。基本上它一直说“收集数据”在本地变量手表。

所以我没有一步一步地尝试在按下“Resume”后立即添加断点。现在它显示“Waiting until last debugger command completed”。

以前有人遇到过这个问题吗?更改调试器是解决这个问题的唯一方法吗?

relj7zay

relj7zay1#

在IntelliJ(2017.1.4社区版)上,以下内容为我修复了该问题:

  • 文件-〉设置
  • 输入“toString”
  • 导航到构建、执行、部署-〉调试器-〉数据视图-〉Java
  • 找到“启用'toString()'对象视图:“复选框
    *取消选中该框

重新运行调试器。

slhcrj9b

slhcrj9b2#

以下内容在IntelliJ 2018.2.4上为我修复了它:

  • 右键单击断点
  • 切换设置以暂停“线程”而不是“全部”

如果您实际上需要挂起所有线程以进行调试,这将不会有帮助,但它为我消除了“正在收集数据...”和“等待直到最后一个调试器命令完成”消息。该设置在后续断点也会保持,因此您只需要更改一次。

yi0zb3m4

yi0zb3m43#

我刚刚遇到了类似的问题。在我的例子中,断点堆栈跟踪中的类(KafkaStream)使用了“坏”toString方法。toString方法阻塞,因此挂起了调试器。我在主代码中测试了toString方法,它挂起了主线程(即,这不是调试器特定的问题)。
下面是命中断点的线程的堆栈跟踪(在试图测试类的布尔属性的行上):

Intellij提供了一种解决我的问题的方法,它允许你重写调试器呈现类的方式:

如果您的问题再次出现,我建议进行线程转储(IDE内部或外部),看看您的线程正在做什么。

n1bvdmb6

n1bvdmb64#

在大多数情况下,这可能是由于您在调试时添加了监视。请清除可能导致递归执行代码中相同语句的监视语句。在调试之前,请始终保持监视的清洁。

2eafrhcq

2eafrhcq5#

我曾经遇到过这种情况(在版本2020.3.3上),“使缓存无效”和重新启动解决了它。

wfauudbj

wfauudbj6#

在我的例子中,这是因为一个gradle守护进程卡住了,即使在运行./gradlew --stop时也没有停止,所以我运行了以下命令来终止所有gradle守护进程并修复这个问题。

ps aux | grep GradleDaemon | awk '{print $2}' | xargs kill -9
628mspwn

628mspwn7#

对我有效的修复是删除方法断点。这使它变得超快。

相关问题