2011-11-12 34 views
3

坠毁原因在此之后的Android教程:http://developer.android.com/resources/tutorials/hello-world.html我添加了两行应导致空指针异常:怎么看在Eclipse调试器

 
Object o = null; 
o.toString(); 

现在我设置断点在第二行,并开始调试。当调试器中断时,我点击“跳过”和应用程序崩溃。但是,我在调试器中看不到任何有用的信息。调试窗口显示ActivityThread.performLaunchActivity,源窗口显示“未找到源”。在任何Eclipse调试器窗口中,我没有看到有关异常,空指针等的任何信息,也没有看到任何指向导致崩溃的代码行。那么,我错过了什么?

编辑。也许Android UI框架拥有自己的异常处理机制,这可以防止我在代码中立即看到异常?像这样的事情发生在另一个UI框架,如WinForms,Qt,wxWidgets。

回答

2

您可以在LogCat中看到错误。 Window->Show View->other->Logcat

+0

当我执行o.ToString行时,LogCat窗口中没有新东西。 –

+0

您无法在Logcat中看到任何内容? –

+0

LogCat窗口正在工作,但是当我执行此行时,没有新的信息添加到它。 –

1

尝试这样的事情......

try { 
    Object o = null; 
    o.toString(); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 

...并使用DDMS观点蚀。

理想情况下,你想捕获特定的异常,所以catch块会...

catch (NullPointerException npe { 
    npe.printStackTrace(); 
} 

...但做一个“所有”为Exception在我的第一个例子,使用Eclipse DDMS透视图查看logcat输出会给你一个良好的开端。

+1

谢谢,我知道异常处理,但在这里我想了解如何在调试器中处理未处理的异常。 –

3

发生异常之后,您应该检查Logcat窗口以获取详细信息:您会发现整个堆栈导致出现异常的代码行。在某些情况下,其他类(不是你)会发生异常 - 那么您应该在堆栈中查找您的包/类名称以查找otu是否对其负责。

相应的输出不会立即出现在Logcat中 - 让它运行一段时间(或直到它崩溃)。

此外,您可以设置“Java异常断点”,以便在出现异常时执行会中断。

+0

请给我更多关于设置“Java异常断点”的细节,也许这就是我正在寻找的。 –

+0

转到运行|添加Java异常断点。在那里你可以设置特定的例外或者所有的例外。 [from eclipse .org](http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fviews%2Fbreakpoints%2Fref-addexception_viewaction.htm) – Asahi

+0

BTW ,很久以后LogCat中没有新的信息。 –

1

最后,我在“断点”调试器窗口中找到了有用的信息。它显示NullPointerException并且完全指向攻击线。