Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java调试和运行会产生不同的结果_Java_Debugging_Intellij Idea_Jvm - Fatal编程技术网

Java调试和运行会产生不同的结果

Java调试和运行会产生不同的结果,java,debugging,intellij-idea,jvm,Java,Debugging,Intellij Idea,Jvm,所以,我和我的朋友在开发过程中遇到了一个问题,似乎无法解决 一点背景信息: Connected to the target VM, address: '127.0.0.1:65492', transport: 'socket' Disconnected from the target VM, address: '127.0.0.1:65492', transport: 'socket' Found plan Process finished with exit code 0 我们已经实现了

所以,我和我的朋友在开发过程中遇到了一个问题,似乎无法解决

一点背景信息

Connected to the target VM, address: '127.0.0.1:65492', transport: 'socket'
Disconnected from the target VM, address: '127.0.0.1:65492', transport: 
'socket'
Found plan

Process finished with exit code 0
我们已经实现了一个最佳优先搜索和一个数据类型节点,使我们能够搜索节点的树。注意,在我们的数据类型中,由于实现中更复杂的部分,我们覆盖了hashCode函数

如果找到目标节点,搜索将停止,并使用每个节点的父节点提取解决方案,以编译遍历路径的列表

这个程序比这更复杂,但我希望现在这个描述足够了:)

问题

Exception in thread "main" java.lang.NullPointerException
at java.util.HashSet.<init>(HashSet.java:118)
at conflict.ClearPathConflict.solveConflict(ClearPathConflict.java:133)
at searchclient.Plan.getExpandedResolutions(Plan.java:233)
at searchclient.Plan.solve(Plan.java:94)
at search.SearchHTN.getExpandedNodes(SearchHTN.java:33)
at search.SearchHTN.search(SearchHTN.java:59)
at searchclient.SearchClient.run(SearchClient.java:127)
at Debug.main(Debug.java:12)

Process finished with exit code 1
对于这个搜索问题,我们有不同的输入(相同的标准),每当一个搜索问题无法解决时,我们就调试我们的算法,找出它的行为方式和原因

然而,一个特定的输入给出了一个奇怪的响应。正常的构建和运行不起作用,并在搜索时抛出异常,向我们指出有问题,但当我们尝试调试它时,搜索完成,并根据我们所能收集的信息为我们提供正确的解决方案

随着调试模式的完成和工作,我们很难像您想象的那样真正调试它:)

  • 从这个行为我们推测我们的代码在调试VM中的工作方式不同

  • 正常运行和调试运行之间有什么区别

  • 两者的执行情况如何不同

正常运行

Exception in thread "main" java.lang.NullPointerException
at java.util.HashSet.<init>(HashSet.java:118)
at conflict.ClearPathConflict.solveConflict(ClearPathConflict.java:133)
at searchclient.Plan.getExpandedResolutions(Plan.java:233)
at searchclient.Plan.solve(Plan.java:94)
at search.SearchHTN.getExpandedNodes(SearchHTN.java:33)
at search.SearchHTN.search(SearchHTN.java:59)
at searchclient.SearchClient.run(SearchClient.java:127)
at Debug.main(Debug.java:12)

Process finished with exit code 1
Found plan
输出意味着我们已经找到了问题的解决方案,并且已经制定了详细说明解决方案的计划。我们已经在调试模式下检查了这一点,就我们所见,找到的计划是一个有效的解决方案

我们尝试了什么?

  • 我们已经在不同的机器上测试了代码
  • 不同的操作系统
  • 在IntelliJ和命令行Java中运行它
  • 从我们的回购协议中提取新版本并重新编译
每次都是相同的结果,如果我们编译并正常运行它,搜索就会失败,但当我们调试它时,它实际上完成了,并给出了问题的正确解决方案

我们还注意到,在搜索失败之前,搜索似乎会持续更长的时间,而不是完成搜索。也就是说,它在失败运行中探索的节点比在调试运行中探索的节点多得多

我们在这里不知所措,所以我们希望你们能通过提问、猜测或其他方式帮助我们:)

提前谢谢

TL;博士

Exception in thread "main" java.lang.NullPointerException
at java.util.HashSet.<init>(HashSet.java:118)
at conflict.ClearPathConflict.solveConflict(ClearPathConflict.java:133)
at searchclient.Plan.getExpandedResolutions(Plan.java:233)
at searchclient.Plan.solve(Plan.java:94)
at search.SearchHTN.getExpandedNodes(SearchHTN.java:33)
at search.SearchHTN.search(SearchHTN.java:59)
at searchclient.SearchClient.run(SearchClient.java:127)
at Debug.main(Debug.java:12)

Process finished with exit code 1

正常编译和运行java程序会产生与在调试模式下运行时不同的结果。由于调试模式会产生正确的结果,因此我们无法在正常模式下找到出错的地方。

欢迎使用堆栈溢出!请拿着这本书,四处看看,仔细阅读,尤其是和请输入完整的错误消息。还有一个有趣的问题,你能更明确地解释一下例外情况吗?啊,是的,当然-对此感到抱歉。这个问题把我难住了:D!我已编辑并添加了问题错误消息:)如果记录应用程序的每次运行(调试和非调试)并相互比较日志,会发生什么情况?异常表示传递给
HashSet
的构造函数的集合已为
null
。您可以使用堆栈跟踪来追溯
null
参数的来源以及在什么情况下可能是
null
。不同的结果可能是由于时间差异(通常表示与多线程相关的错误)或由于JRE会话的历史记录,这可能表明一些代码依赖于未指定的东西,例如
HashMap
/
HashSet
迭代顺序。