【发布时间】:2011-05-15 22:22:25
【问题描述】:
尝试以下方法:
创建一个 HelloWorld 应用程序。
在 onCreate 末尾添加 Log 语句:
在 Log 语句上放置一个断点。
在模拟器中运行应用程序并注意它的工作原理,然后逐步查看 Eclipse 的 LogCat 窗口中的 Logged 条目。
-
将 HelloWorldActivity 更改为从 ListActivity 而不是 Activity 扩展。
公共类 HelloWorldActivity 扩展 ListActivity { - 再次在模拟器中运行应用程序并注意它无法到达 Log 语句。
我的问题不是为什么会失败。我的问题是,您将如何调试此故障?我在 Eclipse 调试窗格中看到的只是一个 RuntimeException。我看到 LogCat 有一堆消息,但它很大,我已经搜索过它,但找不到任何东西来表明什么是错误的或在我的代码中发生异常的位置。我找不到在 RuntimeException 或堆栈跟踪中显示消息的方法,以了解哪一行代码引发了异常。
我认为必须有更好的方法来使用这些工具来查找错误,但我是新手,除了将我编写的所有代码都包装在 try/catch 中之外,似乎找不到更好的调试方法。我本来希望在引发异常的 LogCat 中找到一条消息。我本来希望调试窗口允许您检查异常的内容。我并不是说不存在这样的技术,我是说作为初学者我很难弄清楚如何调试并询问确实存在哪些技术以及如何使用它们?
所以,简单地说:
- 如果您还不知道导致此错误的原因,您将如何发现该错误?
- 您将使用哪些技术来找出根本原因?
- 您将如何检查异常的详细信息?
- 一般来说,您如何使用 Eclipse 发现 Android 代码中的问题?
欢迎多提建议和讨论。 :)
我会包含我的 LogCat 内容,但它太大了,不合理。你自己应该可以很容易地重现这个,所以我把它省略了。 LogCat 中可能有一些东西可以帮助我,但是因为它太大了,甚至运行一个小程序,我需要一个提示,说明在遇到 API 调用引发的异常时要搜索什么以及如何解释它。我看到其他帖子指出 LogCat 中应该有一些东西,虽然这可能是真的,但我自己没有找到任何东西。如果您认为 LogCat 中应该包含某些内容,请自行运行测试并将这些行复制到您应该找到的响应中。
谢谢。
========
目前总结的技术列表如下:
侵入性技术: 1. 在您希望看到您执行的代码位置放置一个 Toast。 2. 在您认为可能引发异常的代码周围放置 try/catch。 3. 注释掉代码,重新编译重新测试。
非侵入性技术: 1.使用调试器。断点、变量检查…… 2.猴子压力测试仪。 3.下载Android源码库。 4. 使用 LogCat 过滤器查看是否列出了“Caused By”。
不清楚是否可用: 1. 具有额外日志记录、断言或其他额外帮助的 Android 库的调试版本。 2. 能够通过调试窗格或其他技术在 Eclipse 中检查异常。 3. 一种定义更全局的 try/catch 异常处理程序的方法。 4.能够通过Android库源码进行调试。
不可用: 1. 一种查看异常内容或异常发生位置的非侵入性方式。
【问题讨论】:
-
为了检查异常细节,我经常在调试模式下使用表达式窗口(窗口>显示视图>表达式)来检查值。这在检查异常时很方便,因为 exception.getMesage() 并不总是返回消息(即 null) 在调试模式下,在断点中右键单击变量并选择“监视”。您必须越过异常才能观看它。
-
Eclipse 中的“问题”窗口将显示预编译时错误,以及严格的警告。 (窗口>显示视图>其他...问题)
-
LogCat 起初是小姐领先。过滤器适用于消息而不是您的日志标签。要创建自定义过滤器,您应该使用 LogCat 菜单并选择“创建过滤器”选项。在这里,您可以按标签和 pid 进行过滤,从而为您提供更精细的控制。它也出现在选项卡式窗口中。隐藏系统事件非常有用。这些消息现在确实有助于最后的工作,但可能不会向您显示错误。所以轻弹回来显示所有系统事件。 (或按 pid 记录)
标签: android eclipse debugging exception logging