如何调试此NullPointerException?

时间:2009-08-01 20:41:15

标签: android eclipse

我正在尝试为Android编写应用程序,当我启动新活动时,我设置了断点并发现它通过我的onCreate运行而没有任何错误,但在该函数返回后,调试器说有NullPointer异常。问题是,它不在我的代码中,它在ActivityThread.performLaunchActivity(ActivityThread $ ActivityRecord)行中显示它:2268并且源通常是(如果它是我的代码)我只是得到“Source not found”。和一个显示“编辑源查找路径”的按钮

如何设置eclipse以便我可以调试此问题?我确定我在代码中做错了,但是由于异常源于我无法看到的代码,我不知道如何找出问题所在。

我在这个项目中使用了android-sdk-linux_x86-1.5_r3和我的G1。

更新:我认为我的问题与android开发有关,而不是使用eclipse。我不知道在哪里找到抛出异常的代码的源代码。也许有一种方法可以在没有该文件的情况下调试它,但我不确定它会是什么。

7 个答案:

答案 0 :(得分:55)

我自己想知道这个问题,即使它在logcat中显示“由...引起”,我也希望调试器真正打破NullPointer被抛出的位置(即使它被捕获)

以下是:

  1. 运行 - >添加Java异常断点
  2. 查找NullPointerException(或您可能正在调试的任何其他内容(“由...引起的异常”)
  3. 确保选中Suspend On Caught Exceptions。单击“确定”。
  4. 您应该在视图中看到新的断点
  5. 现在尝试运行它,调试器应该在实际发生的地方中断。

答案 1 :(得分:3)

你的假设应该是NPE是由你造成的,而不是Android造成的。 NPE可能会弹出ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord) line: 2268,但这意味着你传递了一个指向某个东西的空指针,它一直传递到performLaunchActivity实际尝试使用它并在发现空指针时崩溃。

如果我们可以看到完整的LogCat,特别是Eclipse LogCat中的红色,它将有助于调试。我已经让自己内心寻找NPE,只为其他人找到一个非常微妙的资源初始化线。

答案 2 :(得分:2)

  

一个显示“编辑源查找路径”的按钮

点击该按钮告诉Eclipse在哪里可以找到该方法的源代码。这应该有所帮助。至少你可以在调试器中进入它并阅读更合理的东西。

答案 3 :(得分:2)

你能展示完整的调用堆栈吗?

通常,至少在Android中,异常会触发两个单独的跟踪。第一个没用。第二个,由“由例外引起”,是你想要的那个。

而且,即使堆栈跟踪都没有您的代码,我们也可以通过查看整个内容来识别某些内容。

答案 4 :(得分:1)

我没有和Andriod合作过,但Eclipse应该能够向你显示调用堆栈。查看程序退出代码并输入其他人的位置,并确保所有变量都正确(非空,包含“正确”数据等)。

答案 5 :(得分:0)

即使它发生在Android代码中,您仍然应该能够缩小它发生的位置以及它不喜欢哪些变量。是的,模糊的回答,没什么可说的。或者下载源代码并告诉Eclipse它在哪里。

答案 6 :(得分:0)

如果您想在不下载Android源代码的情况下查看异常发生的位置,那么有一个很好的plugin for eclipse called GrepCode。它在线搜索并显示流行的java项目的源代码。