当我的 Android 应用程序无法按预期运行时,我如何找出导致问题的原因?有哪些工具可用于专门调试 Android 应用程序?
(我写这篇问答是为了将 Android 文档中几页的信息收集到一个地方。)
logcat
logcat
是调试 Android 应用程序最有用的工具之一。通常,有问题的应用程序会以一条消息终止,该消息指出“不幸的是,已停止”。要找出原因,您可以使用该logcat
工具获取堆栈跟踪。
logcat
也是一般调试的有用工具。Android 没有控制台,因此典型的System.out.println()
调用对于打印出跟踪信息和变量值不是很有帮助。相反,您可以使用android.util.Log类(另请参阅Android 文档中的读取和写入日志)。该类提供了输出具有 5 个严重级别的日志消息的功能:ERROR、WARN、INFO、DEBUG、VERBOSE。每个严重级别都有相应的方法,因此您很少显式使用这些常量。
出于调试目的,您通常会使用Log.d()
两种形式的 which:Log.d(String, String)
和 Log.d(String, String, Throwable)
. 第一个String
参数是一个“标签”,可以是你想要的任何东西。通常这只是记录消息的类的名称。此标签允许您使用 过滤日志消息logcat
,因此您可以使用它快速轻松地找到您关心的消息。第二个String
是实际的日志消息。这可以是简单的执行跟踪或变量的值或您认为有助于调试目的的任何其他输出。最后一个参数是可选的,例如,可用于在语句Throwable
中记录异常。throw...catch
现在,一旦您在应用程序中记录了消息,您就可以使用它logcat
来查看它们。如何执行此操作的具体细节取决于您是使用命令行工具还是使用 Eclipse 和 Android 开发插件进行开发:
最简单的形式是运行
adb logcat
如果您只需要在应用程序引发异常时查看堆栈跟踪,这将很有帮助。如果你想过滤掉某些调试消息,你可以通过你使用的标签字符串和日志级别来做到这一点。语法是
adb logcat <tag>:<debugging level> ...
例如,如果我在调用时使用了标签“HelloAndroid” Log.d()
,我可以输入
adb logcat HelloAndroid:D *:S
(*:S
最后的静音所有其他标签的输出。)
调试对于任何程序员来说都是一项至关重要的技能,可能比学习编写代码更重要。我希望以上提示有助于减少任何潜入 Android 开发的人的学习曲线。希望你能比我更快地掌握速度。