第十四课:调试(基于AndroidStudio3.2)

当写的代码就会变得越来越大,越复杂。 将错误引入代码的可能性会增加,并且它们将变得更难以发现。

调试程序有几种方法(和工具):决定使用哪一种取决于您尝试进行故障排除的错误类型。 话虽如此,让我们试着回顾一下你将遇到的一些最常见的错误。

  • Syntax errors. 【语法错误】这些是由Java编译器生成的; 它发生是因为你在代码中犯了错误。 这些错误可能很简单,比如忘记语句末尾的分号,或者在将参数传递给某个方法时可能与类型不兼容一样复杂。 当这些错误发生时,AS3会给你足够的信息
    关于代码有什么问题的视觉提示和文本信息。 大多数情况下,它甚至会指出问题的确切位置
  • Runtime exceptions.【运行时异常】这些是由运行时生成的。 它们之所以发生,是因为运行时环境中有一些您没有预料到并且您的程序无法继续运行; 例如,如果您尝试打开特定文件,但在运行时,该文件不是您的程序所期望的。 当您遇到这些错误时,运行时会打印出有助于排除错误发生位置或可能导致错误的信息。 然后,您将完成代码并执行分析。 您可以在代码的关键联结中插入各种打印语句,以验证和确认代码的路径分析,或者,您可以使用AS3交互式调试程序。 调试器允许您遍历代码并在执行时逐步执行
  • Logic errors.【逻辑错误】这些可能是最难解决的; 他们是由你造成的。 当程序编译并运行没有问题,但它没有按预期运行时,这是一个逻辑错误。 您需要执行代码分析,然后在代码的关键时刻插入print语句或使用交互式调试器(或两者)

一、Syntax Errors

在大多数情况下,语法错误是三种错误中最容易发现的; 这是因为AS3在发现这些错误时已经完成了大部分繁重的工作。 主编辑器窗口提供了大量关于代码错误的视觉提示和文本信息。
下图显示了AS3如何帮助我们发现编码错误; 代码在两个语句中缺少分号。 当你遇到语法错误时,你会注意到的第一件事是主编辑中的红线; 注意分号丢失的地方的波浪线。AS3为您提供了足够的视觉提示,使您的代码无法正常运行。 如果您将鼠标悬停在波浪线上方足够长的时间,AS3将以工具提示的形式弹出有用的消息。

如果您尝试“制作”或构建项目,AS3将在其中显示编译器错误。如果双击错误图标(红色感叹号),大多数情况下它会将光标直接转到主编辑器中的违规行。
语法错误并不总是很容易解决,下图显示了AS3非常丰富多彩的显示,同时它正在努力弄清楚代码有什么问题,但在这种情况下,波浪线和实际错误消息都不是很有帮助。代码有什么问题是在if语句中缺少大括号,但错误消息并未指向它。如果遇到这些类型的错误,您仍然可以双击感叹号,虽然它不会指向您确切的错误,但您可以从该常规区域开始。通常,错误将位于错误消息的位置之前:扩大搜索范围并严格执行查看代码。寻找结构问题,如缺少parens或花括号。

二、Runtime Exceptions

当程序运行到它不期望的环境中时,就会发生运行时异常。发生这种情况时,运行时会打印出一条消息,其中包含异常名称,程序中发生异常的行号以及一堆堆栈跟踪。堆栈跟踪包括在异常发生之前运行的方法,谁调用了该方法,调用该方法的方法被调用,依此类推。一个谨慎的步骤是查看错误发生在程序中的哪个位置,并从那里查看代码。
当您浏览代码时,您会发现一些区域,您非常确定您知道发生了什么以及您不太确定的区域。在这些情况下,您可能希望将一些打印语句放入您不太确定代码路径的区域; print语句将帮助您验证路径假设是否与代码在运行时的行为一致。您可以使用Java的“System.out.println”语句,这是编码员的最爱,但由于我们在Android上,因此最好使用“Log”类。 Log类有五个可用于记录的静态方法。

Log.v(String, String)(verbose)
Log.d(String, String)(debug)
Log.i(String, String)(information)

Log.w(String, String)(warning)
Log.e(String, String)(error)

Log方法有两个字符串参数。 第一个是标记,第二个是您要记录的实际消息。 稍后当您尝试过滤运行时输出的所有消息时,“标记”将很有用; 它会吐出Android运行时中发生的一切。 “标签”将帮助您稍后浏览大量消息。 以下代码显示了有关如何使用其中一个Log方法的示例。

private final String TAG = "My Application";
Log.i(TAG, "I got in here");

运行应用程序时,可以在Logcat工具窗口中查看日志消息(下图)。 您可以通过单击AS3窗口底部菜单条中的选项卡或从主菜单栏View ➤ Tool Windows ➤ Logcat.启动它。

Logcat窗口显示Androidruntime中的所有消息(默认设置)(下图)。 您可以将日志级别调整为“详细”(默认),显示所有
消息或任何其他四个级别:“debug”,“info”,“warning”,“error”或“assert”。

三、Logic Errors

逻辑错误是最难找到的,因为编译器和运行时都无法为您提供有关错误的信息。 唯一可以判断出存在问题的方法是因为程序的行为不正常。 我们会遇到单元测试的概念,并且希望这样做; 这通常是针对这类错误的第一道防线,但不幸的是,单元测试这里不讨论。 但是,我们将讨论一种可以帮助您解决逻辑错误的技术。
AS3包含一个交互式调试器,可让您走动并逐步完成代码正在运行。 要开始进行交互式调试,请停止当前正在运行的应用程序。 从主菜单栏中,单击 Run ➤ Debug App.

在调试模式下运行应用程序不是调试应用程序的唯一方法。 你也可以附上当前运行的应用程序中的调试器进程。 在某些情况下,第二种技术很有用; 例如,当您尝试解决的错误发生在非常特定的条件下时,您可能希望运行应用程序一段时间,当您认为接近错误点时,您可以附加调试器。

在调试模式下启动应用程序后,您现在可以设置断点。 断点是通过单击编辑器边缘的装订线创建(下图)。 可以在具有可执行语句的行上设置断点。 您可以开始在代码的那些区域添加断点,而您不确定发生了什么。

设置断点时,装订线上会出现一个粉红色的圆圈图标,整条线都会以粉红色点亮。 此时,您的应用程序已在运行,当执行到您设置断点的行时,设置断点的行将变为蓝色。 此时,调试器窗口打开,程序执行停止,AS3进入交互式调试模式。 处于此状态时,应用程序的状态将显示在“调试”工具窗口中。 在此期间,您可以检查变量的值,甚至可以查看应用程序中运行的线程。

在监视窗口(或变量视图,如上图所示)中,您可以通过单击带眼镜图标的加号来添加变量或表达式。 将有一个文本字段,您可以在其中输入任何有效的Java表达式。 按Enter键时,将评估表达式,您将能够看到表达式的结果。 要删除监视表达式,请选择表达式并单击监视窗口上的减号图标。要恢复程序执行,可以单击调试器工具栏顶部的“恢复程序”按钮,或者; 您也可以从主菜单栏Run ➤Resume Program.执行此操作。 如果要在程序自然完成之前暂停程序,可以单击调试器工具栏上的“停止应用程序”按钮:它是红色方块图标。 或者,您也可以从主菜单栏 Run ➤ Stop app.执行此操作。

猜你喜欢

转载自blog.csdn.net/gumufuyun/article/details/83314530