如何在Eclipse中调试Android时查看异常详情?

3

我刚开始学习如何开发Android应用程序。目前,我正在使用Eclipse 4.2(Juno)作为IDE。问题是我无法看到一种正常的方式来查看在我的代码中发生的异常。例如:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    List<BasicObject> objects = _objectRepository.GetAllObjects();
    Iterator<BasicObject> iterator = objects.iterator();

    while(iterator.hasNext())
    {
        ObjectListItemView itemView= new ObjectListItemView(this,iterator.next());
    }
}

当运行onCreate时,_objectRepository为空,因此会抛出NullReference异常。然后Eclipse显示“未找到源代码”,这确实不是我期望的结果。然后我按多次F8(继续),进程退出并且调试器停止。只有在那之后,我才能在LogCat中看到一些堆栈跟踪信息(从那里导航到自己的代码真的很难)。
如您所见,捕获异常的整个过程非常耗时。是否有其他方法可以查看异常?我做错了什么?
我没有使用Android模拟器,而是使用真实设备(HTC Desire S)。我已经有了LogCat,但我想要更方便/实用的工具。
举例来说,在Visual Studio中,我可以在调试时查看异常。Visual Studio在发生异常的行上设置断点,我可以在异常窗口中查看任何所需信息(堆栈跟踪、本地变量,所有相关信息)(请参阅The {not much utilized} Debug->Exceptions… window technique)。
在Eclipse中,我可以在LogCat中获取异常详细信息(这非常不方便),但只有在调试器停止后才能获取。

我猜你所说的“with VS”并不是指在VS中使用Android吧?Logcat是Android的一部分,Eclipse只是提供了一个视图(你可以在没有任何IDE的终端窗口中看到相同的东西)。 - CodeClown42
抱歉,我找不到我写“with VS”的地方。我没有在VS中开发Android应用程序,我正在使用Eclipse。 - armless-coder
实际上是“例如在Visual Studio中”,我的意思是logcat报告延迟也不是正常的Eclipse问题。这是特定于logcat和Android的,我认为在VS中也是一样的。异常会在报告给logcat之前触发调试器,这就是为什么您必须恢复才能在那里看到它被报告的原因。 - CodeClown42
2个回答

1

我认为armless-coder已经在Eclipse中有了logcat,这不是问题。 - CodeClown42
@goldilocks,他在调试Android模拟器时发现查看异常很困难。但是如果他在正常代码中运行应用程序,则可以在logcat中看到所有抛出的异常。无论哪种方式,logcat都是可以看到所有异常的地方。 - UVM
UVM:是的,但他/她已经在提到在logcat中看到异常,但对它们如何出现感到困惑(“只有在那之后我才能在logcat中看到一些堆栈跟踪”)。注意:无论在eclipse内部还是外部,logcat都是相同的。 - CodeClown42
他说由于空值,抛出了空指针异常。这是一个运行时异常。运行时异常可以在logcat中查看。但我的理解是,在Java中有一些代码片段会默默地消耗异常。所以在那种情况下,它甚至在logcat中也不可见。因此需要更多地了解他的代码。 - UVM
谢谢,我已经得到了一个logcat,并且可以在其中看到堆栈跟踪,但只有在停止调试器后才能看到。 - armless-coder
@armless-coder:我非常确定这是我回答中提到的原因。我认为没有任何办法可以避免这种情况:这是由Android操作系统负责,而不是Eclipse,所以无论使用什么工具都无关紧要。请记住,您正在调试在另一台机器上运行的代码。 - CodeClown42

-1

为了将消息记录到logcat,操作系统需要执行一些操作;这些操作由(未捕获的)异常触发。如果您尝试在调试器中逐步执行它们,那么这将是很繁琐的,并且您会经常看到“源代码未找到”(这是系统代码,而不是您的代码)。

虽然这很烦人,但可以肯定的是,在异常之后发生的任何事情都不会发生在您的应用程序内部,因此您可能会在该点停止。如果您需要快速查看异常的logcat报告,请直接在没有调试器的情况下运行应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接