Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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 使用Eclipse进行调试时,跟踪空指针异常的最佳方法是什么?_Java_Eclipse_Debugging_Nullpointerexception - Fatal编程技术网

Java 使用Eclipse进行调试时,跟踪空指针异常的最佳方法是什么?

Java 使用Eclipse进行调试时,跟踪空指针异常的最佳方法是什么?,java,eclipse,debugging,nullpointerexception,Java,Eclipse,Debugging,Nullpointerexception,我们在使用Eclipse跟踪代码中的空指针异常时遇到困难,我想知道Eclipse是否在这方面提供了帮助。Eclipse提供了哪些方法来轻松跟踪空指针异常 为了说明这一点,下面是一个抛出NPE的典型代码示例: if (myObject.getDimensionMap().get(keyValue.getConcept()).isMeasureDimension()) { 除非我弄错了,否则对象可能为空有5种可能性: myObject可以为null myObject.getDimensionMa

我们在使用Eclipse跟踪代码中的空指针异常时遇到困难,我想知道Eclipse是否在这方面提供了帮助。Eclipse提供了哪些方法来轻松跟踪空指针异常

为了说明这一点,下面是一个抛出NPE的典型代码示例:

if (myObject.getDimensionMap().get(keyValue.getConcept()).isMeasureDimension()) {
除非我弄错了,否则对象可能为空有5种可能性:

  • myObject可以为null
  • myObject.getDimensionMap可能为空
  • keyValue可以为null
  • keyValue.getConcept可以为null
  • myObject.getDimensionMap().get(keyValue.getConcept)可以为null
为了避免更改代码以使每个语句位于不同的行上,Eclipse是否提供了任何方法来帮助查找NPE,而无需单步执行每个语句?请记住,开发团队花了相当长的时间才找到这条语句,更不用说找出哪一个元素为null了(它是getDimensionMap().get)

更新:

花了很长时间才找到NPE的真正原因,因为违规代码被隐藏在一个深层调用层次结构中,外层有一个捕获所有异常的方法。这样做的原因是,异常可以以更吸引人的格式呈现并显示给用户。所以代码是这样的

try {
  doSomething
  ...
    callSomething
      callSomethingElse
      ...
      offending if test which throws the NPE
      ...
} catch (Exception e) {
   // Format exception and pass back to client
}
当然,用户永远不想看到短语NullPointerException


谢谢。

从Eclipse运行/添加java异常断点

选择NullPointerException。确保勾选了“捕获异常时挂起”


唯一的缺点是它会在任何有意在内部引发和捕获NPE的代码上触发。

从Eclipse运行/添加java异常断点

选择NullPointerException。确保勾选了“捕获异常时挂起”


唯一的缺点是它会触发任何有意在内部引发和捕获NPE的代码。

问题真的是:“除了修复代码或正确调试它之外,Eclipse还为我提供了什么其他方法来发现错误?”因为如果是,答案是:无。即使是异常断点也只会将您带到行,因为行是Java中定义的调试的基本单元。如果您能告诉我们为什么他们花了这么长时间才找到空的内容,这会有所帮助。在一般情况下,它应该非常简单:设置异常断点,当程序停止时,检查变量,如果一切正常,进入第一个方法,检查变量,进入下一个方法,检查变量…好的,我将更新问题,说明为什么花了这么长时间。我希望Eclipse中有一个功能,比如“在抛出系统异常时中断连接”@biziclop啊!在重读之后,我看到您也提到了异常断点,所以我向您投票。谢谢-我们不知道此功能。干杯,这是拼图中缺失的部分。:)问题真的是这样的吗:“除了修复代码或正确调试代码外,Eclipse还为我提供了什么其他方法来发现bug?”因为如果是,答案是:没有。即使是异常断点也只会将您带到行,因为行是Java中定义的调试的基本单元。如果您能告诉我们为什么他们花了这么长时间才找到空的内容,这会有所帮助。在一般情况下,它应该非常简单:设置异常断点,当程序停止时,检查变量,如果一切正常,进入第一个方法,检查变量,进入下一个方法,检查变量…好的,我将更新问题,说明为什么花了这么长时间。我希望Eclipse中有一个功能,比如“在抛出系统异常时中断连接”@biziclop啊!在重读之后,我看到您也提到了异常断点,所以我向您投票。谢谢-我们不知道此功能。干杯,这是拼图中缺失的部分。:)非常好,谢谢你对内部NPE的警告。这里还有一个非常清楚的解释:为了避免在不相关的异常(通常在启动某些库时抛出)上停止,您可以将常规断点设置为尽可能靠近有问题的代码,并且只有在执行达到该点时才设置异常断点。非常好,谢谢关于内部NPE的警告。这里还有一个非常清楚的解释:为了避免在不相关的异常(通常在某些库启动时抛出)上停止,您可以设置一个尽可能靠近有问题代码的常规断点,并且只在执行达到该点时设置异常断点。