use*_*347 15 eclipse debugging android
不可否认,我的问题与此问题基本相同,但似乎没有答案:
handleStopActivity中的NullPointerException - 在堆栈跟踪中没有对我的代码的引用
在上周内下载了Eclipse Helios,Android Developer Tools插件和JDK.我正在搞乱我的设备上的应用程序,在调试模式下运行它,它意外终止.我意识到我已经导致了NullPointerException并且问题本身不是很长时间的问题.
然而,问题是调试器似乎无法识别我的代码中抛出异常的位置.堆栈跟踪不引用我的代码.
实际上,如果我在OnCreate()方法中加入以下内容,我会遇到同样的问题
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//lI("onCreate()"); //A silly logging thing I messed around with
Integer iDareYou = null;
iDareYou.byteValue();
Run Code Online (Sandbox Code Playgroud)
值得赞扬的是,Eclipse当然警告我,代码可能会在我脸上爆炸.但是当我在我的设备上实际运行它时,返回的堆栈跟踪如下:
Thread [<1> main] (Suspended (exception RuntimeException))
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2787
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2803
ActivityThread.access$2300(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 135
ActivityThread$H.handleMessage(Message) line: 2136
ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 144
ActivityThread.main(String[]) line: 4937
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 868
ZygoteInit.main(String[]) line: 626
NativeStart.main(String[]) line: not available [native method]
Run Code Online (Sandbox Code Playgroud)
我搜索了一些答案,不幸的是,我能想到的是"为什么我的Android应用程序导致NullPointerException"的问题?品种.
我希望找到我应该做的不同,以便能够在我的代码中找到导致异常的点....因为我确信这种能力在某些方面会派上用场未来!
要编辑此内容以添加一些信息.正如下面提到的第一条评论,调试器挂起线程的状态不是应用程序的"最终"状态.按"resume"几次会将进程移动到进程实际终止的位置,但遗憾的是Eclipse/ADT Debug窗口中没有显示有用的堆栈跟踪. 但是,此时我粘贴在上面的堆栈跟踪跟随在我的代码中NPE的堆栈跟踪的前3个唯一行被输出到LogCat.我之前看过LogCat是否有我可以使用的东西,但很可能是在我在调试器中按下'resume'之前将进程移动到这个状态.不幸的是,这样做从来没有在实际调试器的代码中显示NPE的堆栈跟踪.
但是新闻并不是坏事 - 从右边"变量"窗口的信息中,我可以看到线程当前范围内有一个NPE,这至少可以让我知道NPE正在进行中(当然还有LogCat).
因此,基于不同主题中的建议,我发现的最佳工作是为NullPointerException添加"Caught and Uncaught"断点.当我这样做并重新启动时,调试器会在我的代码中显示NPE的堆栈跟踪,并将编辑窗口直接移动到我导致NPE的行.
目前我认为这是因为Android框架正在捕获(并且可能会再次抛出)NPE. 看起来最初的困境是由于Eclipse/ADT/DalvikVM调试堆栈跟踪窗口不包含"引起的"信息(据我所知),显示在堆栈跟踪"稍后"出现的信息中LogCat.我将进一步调查是否可以解决这个问题:)
我很欣赏Bert F的建议,因为我并不完全清楚线程尚未处于"最终"状态.虽然堆栈跟踪[后来]显示在LogCat中是真的,但我没有在LogCat中"错过"它,因为它还没有在那里,我错过的是点击'resume'会导致堆栈跟踪在LogCat中输出.
即使我最初让调试器使用断点停在我的代码中的行,但有一个事实是我可以在恢复线程后最终在LogCat中获得堆栈跟踪,这将有效地解决问题.我真正要求的另一件事就是让调试器停在我的代码中的行中导致异常,而不是它被捕获,然后被Android框架重新抛出.但我相信这将是一个不同的问题:)如果我点击LogCat窗口中显示的堆栈跟踪中的相应行,Eclipse将会发送给我.
我运行了您的确切代码,LogCat 给出了以下异常:
Caused by: java.lang.NullPointerException
at mypackage.test.TestActivity.onCreate(TestActivity.java:23)
Run Code Online (Sandbox Code Playgroud)
当然是
iDareYou.byteValue();
陈述。这就像晴天一样晴朗!
我建议你必须学习如何正确使用Dalvik Debug Monitor Server 。
您发布的日志似乎毫无用处,您是否弄乱了一些 LogCat 过滤器(我遇到过一次)?
OFFTOPIC:“我的代码中哪里导致了异常?” - 我认为你的问题没有得到很好的表述。
我认为这个问题的正确名称可能是 - '如何使用 Android 调试器和 LogCat?一些异常没有正确记录!”
| 归档时间: |
|
| 查看次数: |
3836 次 |
| 最近记录: |