购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3.3 可视化调试变量工具X-Ray

HiLog不仅可以帮助开发者判断代码的执行位置,而且可以在控制台中查看输出的变量数据。事实上,HiLog已经可以帮助开发者完成绝大多数的调试工作了,但是,当我们需要分析一个变量的变化情况时,或者被观察的变量本身又是及其复杂的对象(或对象集合),那么HiLog输出的字符串从表达上就显得略微苍白了。

为了能更加直观地展示变量数据,DevEco Studio搭载了非常亲民易用的调试工具X-Ray Debugger(以下简称X-Ray)。X-Ray的主要功能如下:

· 以表格、JSON等直观形式表达变量内容。

· 折线图、柱状图等直观形式展现变量在程序执行过程中的变化情况。

接下来,通过两个案例介绍X-Ray的具体使用方法。

1.通过X-Ray直观展示数据

X-Ray支持的数据类型包括Java基本数据类型(及其包装类)及各种实例变量。当然,在展示实例变量时,需要开发者复写toString()方法,并输出需要展示的数据内容。

X-Ray展示数据的形式包括字符(Plain)、折线图(Line)、柱状图(Bar)、表格(Table)共4种形式。其中,折线图和柱状图仅支持数值类型(Byte、int、float、double等)及包含数值类型的有序数据结构(List、Vector等)。

X-Ray直观展示数据的方法如下:

(1)定位需要调试的代码,并添加断点。为了演示方便,这里创建了一段示例代码,代码如下:

在这段代码中,创建并初始化了一个整型数组和一个HashMap对象,并且通过HiLog进行了控制台输出。当直接运行这段代码时,HiLog控制台的输出如下:

可以发现,以这种方式进行变量输出并不直观。尤其是对于intArray整型数组,甚至动用了循环语句进行变量输出。

在初始化这些变量的后方(可以在最后一个语句上)添加调试断点,编译并调试到这个断点上,接下来学习一下X-Ray是如何显示这些数据的。

图2-42 X-Ray Debugger工具窗体

(2)在DevEco Studio的菜单栏中选择Tools→X-Ray Debugger菜单,打开X-Ray Debugger工具窗体,如图2-42所示。

在这个窗体中,Enter variable文本框用于添加需要观察的变量名称;Observed Variables文本框用于选择需要观察的变量。Current Value和Value Changes选项卡分别用于观察变量和观察变量的变化情况。

(3)在Enter variable文本框中,输入变量名称intArray并单击其右侧的【+】按钮,此时即可在Current Value选项卡中出现这个变量的各种表达形式(记得一定要先将程序运行至上述代码后方的某个断点),如图2-43所示。

图2-43 数值类型及包含数值类型的有序数据结构的数据表达形式

类似地,还可以通过这种方式查看personInformation变量的各种表达形式。不过,personInformation变量并不适用于折线图和柱状图,如图2-44所示。

图2-44 HashMap数据表达形式

除了直接在X-Ray Debugger工具窗体中输入变量名称以外,还可以在Debug工具窗体或代码编辑窗体中直接选中变量,并在其右击菜单中选择Add to Visual Watches菜单即可快速地将变量添加到X-Ray Debugger工具窗体中用于观察数据,如图2-45所示。

图2-45 Addto Visual Watches菜单

2.通过X-Ray直观展示数据变化情况

在调试程序的过程中,开发者许多时候非常在意一个变量的变化过程。X-Ray可以将变量值按照先后显示在折线图中。为了能够体现这一特征,这里准备了与线性相关的两个变量 i j ,代码如下:

在这段代码中,每次循环后,变量 i 都会自增1,且变量 j 是变量 i 的2倍。直接运行这段代码,HiLog工具窗体会输出以下内容:

如果能将这两个变量通过X-Ray绘制在折线图上就太方便了。方法如下:

(1)在上述代码的加粗位置加上断点,编译并调试该程序,运行至该断点处,如图2-46所示。

图2-46 进入调试断点位置

(2)在菜单栏中打开Tools→X-Ray Debugger工具窗体,添加需要观察的变量 i 和变量 j 。然后,将窗体切换为Value Changes选项卡,此时便可以在折线图中查看当前的 i 值和 j 值。多次按下Debug工具窗体的 按钮,当每次循环进入该断点时就会在折线图中记录一次 i 值和 j 值,如图2-47所示。通过折线图就能够非常清晰地判别变量的变化情况了。

图2-47 利用X-Ray展示变量的变化情况 jIDzHkQoMdxVeYCowstidVTnUjmn8bMFZifOYnvXmZ013A9S9d/07SAjdmDDBdCW

点击中间区域
呼出菜单
上一章
目录
下一章
×