BlueJ/调试
本条目介绍了BlueJ提供的调试功能的最重要的几个方面。我们把这个调试器做的尽可能的简单。我们的目标是编写一个15分钟内就能学会使用的调试器,并且能够在没有更多指导的情况下使用它。现在来看看我们是如何做到这一点的。首先我们简化了传统调试器的在以下三个任务上的功能:
- 设置断点
- 单步执行
- 查看变量
我们现在就试着演示每一项任务。开始前,请打开工程 debugdemo,在安装目录下的 example 目录下可以找到。这个工程包含了一些专门为演示调试器功能的类——他们不关心其他的一些事情。
设置断点[ ]
设置断点允许你在源代码的某一行打断程序的执行。当程序的执行被打断后,你可以查看的你的工程的状态。它通常可以帮助你理解你的源代码到底做了什么。
在编辑器文本区的左边是断点区(如下图).你可以通过在断点区单击来设置断点。一个小的停止图标会出现来标明断点。现在试一下。打开类Demo,找到方法loop,在for循环内部设置一个断点,停止图标应该会出现在你的编辑器窗口里。
当执行到断点所在的行时,执行过程就会被打断。让我们试一下。创建一个 Demo 对象并且用参数(10)调用 loop 方法。只要执行到断点所在行,编辑器窗口就会自动跳出,显示当前行的 代码。同时调试器窗口也会出现.
高亮显示的行是下一步要执行的行。(执行过程在改行还没被执行前被打断)。
小结:要设置断点,单击编辑器左边的断点区。
单步执行[ ]
现在我们已经打断了程序的执行(这是我们相信,这个方法确实被执行了,并且断点的代码也确实被执行到了),我们能够单步执行去查看这个程序是如何向下执行的。要做到这一点, 不断的点击调试窗口里的单步按钮。你应该可以看到编辑器里的行号不断的变化(高亮显示的行随着将要被执行的行而移动).
每次你点击单步,一行会被执行并且又一次停止执行。同时请注意在调试窗口里显示的变量值也在不停的改变(比如 sum )。所以你可以一步一步的执行来观察发生了哪些变化。一旦你厌倦了单步执行,你可以再一次点击断点图标来删除它,然后点击调试器里的继续图标来重新启动执行过程,按正常的执行顺序执行。
让我们用另一个方法来试一下。在 Demo 类 carTest()方法里如下一行设置一个断点:
places = myCar.seats();
调用这个方法。当该行被执行到时,正要执行Car类的seats()方法。单击单步会执行整个行,而不会进入seats()方法。这次让我们试试单步进入 。如果你使用单步进入,你就会进入到一个方法的内部,单步执行该方法(就跟单步一样)。你能够很高兴的单步跟踪这个方法知道该方法结束返回调用它的函数,注意调试器显示的变化。
单步和单步进入在当前行没有的用方法的情况下是一样的。
小结:要单步调试,使用调试器的单步或单步进入按钮.
查看变量[ ]
当你调试你的代码的时候,能够了解你的对象的当前的状态是很重要的(局部变量和成员实例变量)。
要做到这一点是很简单的。你不需要特别的命令来查看变量;当前对象的成员变量和当前方法的局部变量都会被自动显示和更新。你可以选择调用栈里的方法来查看其他当前活动的对象或方法的变量。试一下,比如,在 carTest()方法里再一次设置断点。在调试器窗口的左端,你能看见调用栈,当前的显示是
Car.seats Demo.carTest
这表示 Car.seats 被 Demo.carTest 调用了,你可以选择这个列表中的 Demo.carTest 来查看源代码和当前各个变量的值。
如果你单步运行包含 new Car(…)的行。你可以看到局部变量 myCar 的值显示在<Object Reference>里。所有 Object 子类类型变量的值(除了String)是通过这个方法显示的。你可以通过双击这些变量来查看它们的值。这样做的话会弹出一个和前面描述一致的对象查看窗口,在这里查看对象状态和在对象槽里查看是一样的。
小结:查看变量是很方便的——它们被自动显示在调试器窗口里
暂停和中止调试[ ]
有的时候一个程序运行了很长的时间。你开始怀疑是不是出了问题。也许存在一个无限循环,也许长时间运行是正常的。好,我们可以检查一下。在 Demo 类里调用 longloop(),这个方法运行很长时间。
现在我们想知道程序运行的怎么样了。打开调试器窗口,如果它还没有被打开的话。(顺便说一下,在执行过程中点击代表虚拟机正在运行的旋转图标是打开调试器的一个快捷方式).
现在点击 暂停 按钮。程序的执行被停止了就跟我们设置了一个断点一样。现在你就可以单步执行一段,观察对象,看看是不是一切正常——它只是需要更多的时间来完成运行。你可以 继续 暂停 几次来看看它计数有多快。如果你真的不想让它再继续执行下去(比如,你发现你的程序已经陷入了死循环),你可以点击中止来中止程序的执行。中止操作不应该被频繁使用——这样会使用那些实现的很完美的类进入不一致的状态。所以建议只把这项功能作为一项紧急措施来使用。
小结:暂停和中止可以用来暂时或永久打断程序的执行
参考来源[ ]
http://www.bluej.org/index.html
BlueJ使用手册导航 | ||||
---|---|---|---|---|
|