如何调试此NullPointer异常?

Asa*_*ers 13 eclipse android

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

我怎样才能设置eclipse所以我可以调试这个问题?我确定我在我的代码中做错了,但因为异常源于我看不到的代码,我不知道如何找出问题所在.

我正在使用android-sdk-linux_x86-1.5_r3和我的G1用于这个项目.

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

mik*_*pie 54

我自己想知道这一点,即使它在logcat中显示"由...引起",我也希望调试器能够实际打破NullPointer被抛出的位置(即使它被捕获)

这是如何做:

  1. 运行 - >添加Java异常断点
  2. 找到NullPointerException(或者您可能正在调试的任何其他内容("由...引起的"异常)
  3. 确保选中Suspend On Caught Exceptions.单击确定.
  4. 您应该在视图中看到一个新的断点

现在尝试运行它,调试器应该在实际发生的地方中断.

  • OMFG,如果可以,我会100次投票给你.这实际上拯救了我的理智,我疯狂地试图找出我的NPE实际发生的地方. (4认同)
  • 这段文字完全保存了我的一天,这对那些真正棘手的感觉非常有用!Upvote,upvote! (2认同)

Wil*_*ill 3

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

如果我们可以看到完整的 LogCat,特别是 Eclipse LogCat 中红色的所有内容,这将有助于调试。我已经把自己翻了个底朝天地寻找一个 NPE,只是为了其他人发现一个非常微妙的资源初始化线不合适。

  • 我还必须另外做一件事。每个人可能都会这样做,但没有在这里喊出来,我一直在浪费时间。“确保继续在 eclipse/debugger 中恢复运行,直到在 LogCat 中看到上述错误” (2认同)