调试nullPointerException的好方法

Noa*_*ert 19 java debugging nullpointerexception

我在java中使用eclipse和编程.有时我遇到一个会让我困扰几个小时的nullPointerException.无论如何,更好地调试nullPointerExceptions并找出哪些变量值和其他会导致空指针异常的事情.

jas*_*son 26

查看堆栈跟踪并读取NullPointerException抛出的行号.几乎总是,该行有一些方法调用

x.getValue()
Run Code Online (Sandbox Code Playgroud)

如果xnull,你会得到一个NullPointerException.如果堆栈跟踪顶部的方法不是您的代码,请一直追踪堆栈,直到您找到代码.在这种情况下,通常会传递null给不喜欢null参数的方法.找到并修复它.

此外,当您遇到不属于您的方法时,通常会NullPointerException阅读文档.例如,看看String.replace(CharSequence target, CharSequence replacement):

抛出:

NullPointerException-如果target或者replacementnull.

它没有比那更清楚!

这是一个例子:

在此输入图像描述

看看第4行,我们看到了foo.bar().这意味着foonull.那一个很容易.让我们看另一个例子:

在此输入图像描述

追溯到您的代码,我们看到它s.replace(target, replacement)正在抛出.我们应该检查targetreplacement.我们附上一个调试器:

在此输入图像描述

啊哈!replacementnull.你可以在Eclipse中做同样的事情.设置抛出异常的断点,并使用它来检查方法的参数.我在这里很原始,因为我来自一个思想流派,我真的相信如果他们学会先用艰难的方式去做,那么每个人都会变得更好.泄漏的抽象和所有这些.

  • 一个带有freehanded圈子的例子或截图会很好:) (2认同)
  • 我的问题是,使用类似函数(a,b,c,d,e)的函数,它不会告诉你哪个变量为null. (2认同)
  • @hexafraction:甚至更好,8x10的光面图片中有圆圈和箭头,每个背面都有一个段落,说明每个人使用的内容. (2认同)

Jay*_*han 17

  1. 调试时可以使用BreakPoints视图来捕获空指针.

    窗口 - >显示视图 - >断点

    在视图中,有一个"J!"允许您在异常上设置断点.你可以设置java.lang.NullPointerException.因此,一旦抛出空指针异常,您就可以检查哪个变量导致null.

  2. 您可以做的其他事情是在编码时捕获可能的空指针访问.当然,您无法使用此设置捕获所有Null指针.但仍然有用,在你的日食中设置以下设置.

    首选项 - > Java - >编译器 - >错误/警告 - >空分析