A.6 使用调试器进行跟踪

要想搞明白执行流程,包括形参和实参的工作原理,一种很不错的方式是使用调试器(debugger)。大多数调试器让你能够:

(1) 设置断点(breakpoint),即让程序执行到指定行后暂停。

(2) 以步进方式执行代码,即每次执行一行代码并查看每行代码的作用。

(3) 检查变量的值,看看它们在什么时候变了以及是怎么变的。

例如,在 DrJava 中打开一个程序,并将光标移到方法 main 的第一行,在按 Ctrl+B,这将在这行设置一个断点——显示为红色。按 Ctrl+Shift+D 将启用调试模式:窗口底部将出现一个新的窗格。如果你忘记了快捷键,调试器菜单也包含这些命令。

运行程序时,执行到第一个断点后将暂停,而调试窗格将显示调用栈(call stack),其中栈顶为当前代码行所在的方法,如图 A-5 所示。你可能会惊讶地发现,在方法 main 之前竟然调用了如此多的方法!

调用栈的右边有多个按钮,让你能够以不同的步伐执行代码。还可以单击 Automatic Trace 按钮,让 DrJava 以每次一行的方式自动执行代码。

使用调试器犹如让计算机大声地审读代码。程序暂停后,可通过 Interactions 窗格检查甚至修改任何变量的值。

跟踪让你能够沿执行流程前行,并了解数据是如何在方法之间传递的。你可能预期代码会这样做,但调试器却指出它是那样做的。在这种情况下,你就知道代码可能存在什么样的错误。

{%}

图 A-5:DrJava 调试器的截屏:程序执行到 printTwice 的第 1 行暂停,方法 main 的第 1 行有个断点

可在调试代码的同时对其进行编辑,但不建议这样做,因为如果在程序暂停时添加或删除多行代码,你可能根本不知道结果是怎么来的。

若想了解更多有关如何使用 DrJava 调试器的详细信息,请参阅 http://drjava.org/docs/user/ch09.html