调试是检查应用程序是否存在错误的过程。您可以使用以下方法进行调试:在代码中设置断点和监视,然后在调试器中运行代码。您还可以通过逐行执行代码并检查应用程序状态来查找任何问题。
IDE 使用 Sun Microsystems JPDA 调试器来调试程序。在启动调试会话时,所有相关的调试器窗口都将自动出现在屏幕的底部。您可以调试整个项目、任何可执行类以及任何 JUnit 测试。IDE 还允许您通过将调试器连接到应用程序进程来调试在远程计算机上运行的应用程序。 运行或调试 Web 应用程序、JSP 页或 Servlet 时,您可以使用 HTTP 监视器来监视数据流。缺省情况下,将出现 HTTP 监视器,该监视器收集有关 Servlet 引擎处理的 HTTP 请求的数据。对于引擎处理的每个 HTTP 请求,监视器都会记录关于传入请求的数据、保留在服务器上的数据状态和 Servlet 上下文。您可以查看数据、为将来的会话存储数据、重新显示和编辑以前的请求。有关 HTTP 监视器的详细信息,请在主菜单中选择“帮助”>“帮助内容”。 对于自由格式项目,您必须为“调试项目”命令编写一个 Ant 目标。您还可以编写用于调试特定文件的目标,并将这些目标映射到项目的命令。 基本调试在此部分,我们将使用一个简单的示例来说明如何启动调试会话、如何以手动方式逐步执行代码以及如何监视变量和方法调用。我们将在后面的部分介绍更高级的功能,如设置断点和监视。 此部分的示例是 Array Fill 应用程序。此应用程序非常简单。它将创建一个 sampleBeans 数组,每个 Bean 包含两个属性:firstName 和 lastName。然后,它将为每个 Bean 的属性赋值并输出这些值。 首先需要运行该应用程序以确定它是否会抛出任何异常。下载并提取 ArrayFill 示例的 .zip 归档文件 (。要在 IDE 中打开 ArrayFill 项目,请按 CTRL-Shift-O 组合键找到提取的 ArrayFill 文件夹,然后单击“打开项目文件夹”。将在 IDE 中打开 ArrayFill 项目,并可在“项目”窗口中看到该项目的逻辑结构。http://www./files/documents/4/446/ArrayFill.zip) 在“项目”窗口中,展开“源包”下的 arrayfill 包。arrayfill 包包含两个类:ArrayFill 和 SampleBean。右键单击 ArrayFill.java,然后按 Shift-F6 组合键执行它。在“输出”窗口中出现的输出应该与如下所示类似: java.lang.NullPointerException 启动调试会话在 IDE 中启动调试会话时,IDE 将编译所调试的文件,在调试模式下运行它们,并在调试器窗口中显示调试器输出。要启动调试会话,请选择要调试的文件,然后从“运行”菜单中选择以下某个命令:
如果在 IDE 中打开了多个项目,请确保使用以下方法将 Array Fill 设置为主项目:在“项目”窗口中右键单击 ArrayFill 节点,然后从上下文菜单中选择“设置主项目”。按 F7 键步入主项目的主类。如果未设置项目的主类,则 IDE 将提示您设置它。然后,IDE 将在源代码编辑器中打开文件,显示“输出”窗口和调试器窗口,并刚好在 main 方法内部停止。 调试器窗口让我们简单了解一下调试器窗口。调试器窗口在每次启动调试会话时自动打开,并在完成会话时自动关闭。缺省情况下,IDE 将打开三个调试器窗口:“局部变量”窗口、“监视”窗口和“调用栈”窗口。 ![]() 通过从“窗 口”>“调试”菜单中进行选择,可以打开其他调试器窗口。如果在调试会话过程中打开了调试器窗口,该窗口将在您完成会话后自动关闭。如果在未启动调 试会话的情况下打开调试器窗口,该窗口将一直保持打开状态,直到您手动关闭它。您可以通过将调试器窗口拖动到所需位置来对其进行排列。
逐步执行代码可以使用“运行”菜单中的以下命令来控制代码在调试器中的执行方式:
在本示例中,使用 F7 键按一次一行的方式逐步执行代码。loadNames 调用中出现 NullPointerException,因此在步入该调用时,将在“局部变量”视图中监视 names 数组的值。每个 Bean 都包含一个 null 值。可以继续逐步执行 loadNames 方法 - names Bean 始终为 null。 ![]() SampleBean[] myNames=new SampleBean[fnames.length]; 启动包含这些 Bean 的数组时,它不会实例化 Bean 自身。必须添加以下代码,在 loadNames 方法中实例化各个 Bean:
使其位于 loadNames 方法中的行 names.setLastName(lnames); 之前。 使用断点大多数应用程序都太大,从而无法逐行进行检查。通常,在您认为会出现问题的位置设置一个断点,然后将应用程序运行到该位置。您还可以设置更为专用的断点(如仅当指定条件为 true 时停止执行的条件断点)或适用于某些线程或方法的断点。 在此节中,我们将使用上一个示例中的 ArrayFill 类,因此必须将上面添加的代码注释掉以便重现错误。 设置断点如果仅希望设置简单的行断点,则可以单击所需行的左旁注处。在旁注中将会出现行断点图标 ( ![]() 对于更复杂的断点,请使用“运行”菜单中的“新建断点”(Ctrl-Shift-F8) 命令。“新建断点”对话框将使您能够选择要创建的断点类型并设置断点选项,如中断条件或断点输出到“输出”窗口的信息。 设置断点条件仅当指定的布尔表达式为 true 时,条件断点才停止执行。如果要设置条件断点,请打开“新建断点”对话框,然后在“条件”字段中输入表达式。 例如,打开 ArrayFill.java,在 main 方法的 loadNames 方法调用中设置插入点,然后按 Ctrl-Shift-F8 组合键。在该对话框的“条件”字段中输入 names!=null 并单击“确定”。然后按 F5 键开始调试项目。此时会在 loadNames 方法内中断程序的执行。 定制断点输出在“新建断点”对话框中,您还可以指定到达断点时打印的信息。请在对话框底部的“打印文本”字段中输入任何消息。您可以使用变量引用要显示的某些类型的信息。 断点类型
设置监视通过使用监视,可以在应用程序执行期间跟踪变量或表达式值的变化。要设置监视,请在源代码编辑器中选择要设置监视的变量或表达式,然后单击鼠标右键并选择“新建监视”(Ctrl-Shift-F7)。 您还可以在“监视”视图中创建固定监视。常规监视描述的是变量的内容,而固定监视描述的则是当前为变量指定的对象。要创建固定监视,请右键单击“局部变量”或“监视”视图中的任意项,然后选择“创建固定监视”。 |
|