我有一个对象,它有一组调用它的方法,如:
objectName.method1().method2().method3();
我想知道这些方法中的哪一个导致 NullPointerException 被抛出。有没有办法在 Eclipse调试器中执行此操作?
答案 0 :(得分:2)
如果您想知道哪个特定值意外null
(例如objectName
或从method1()
或method2()
返回值),那么我建议将此逻辑拆分为多个线。然后,您将能够在调试器中设置特定断点并逐步执行确切的失败代码行。
这在生产中运行时也有好处。如果在部署之后或在实时客户环境中发生这种情况,那么您将在堆栈跟踪中获得更具体的行号,该行号指向具有该问题的确切代码行。
答案 1 :(得分:0)
这可以通过Eclipse调试器中的一些小心步骤来完成。在您描述的行上设置断点。如果您在字节码中有可用的局部变量,那么您将立即知道第一次调用通过查看值objectName
导致问题。如果它为null,则表示它是第一次调用。
如果没有,请进入方法(F5)。这将带您实现第一种方法。然后你可以通过踩出来立即返回(步骤返回 - F7)。你应该回到orignal line,调试器准备好逐步完成下一个方法。你继续踩到(F5)。这应该会带你到下一个方法的实现。如果你到了那里,那么仍然没有例外。再次返回(F7)。
继续,直到找到一些异常处理程序,而不是您想要进入的方法。这是你所追求的那个,或者也许是之前的那个,因为那个返回了null。
您还可以使用" Run to line"功能(默认为Ctrl + R)可以更轻松地完成。