// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= 使用 NetBeans IDE 中的可视调试器
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 使用 NetBeans IDE 中的可视调试器 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 使用 NetBeans IDE 中的可视调试器

本文档介绍了如何使用可视调试器来帮助您在 GUI 应用程序中找到并调试可视元素的代码。您可以在 Java 和 JavaFX GUI 应用程序中使用可视调试器。

在本文档中，您将使用可视调试器浏览 Anagram Game 样例项目。本文档将说明如何先生成应用程序的 GUI 快照，然后使用该快照找到源代码，将监听程序添加到事件中并查看 GUI 组件的事件日志。


image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0"]


*要学习本教程，您需要具备以下软件和资源。*

|===
|软件或资源 |要求的版本 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.2, 7.3, 7.4, 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java 开发工具包 (JDK)+] |版本 7 或 8 
|===

*JUnit 说明*。如果在安装 IDE 时未安装 JUnit 库，则当您尝试调试应用程序时，系统将提示您解决缺少资源问题并安装 JUnit。


== 生成 GUI 快照

在本教程中，您将使用 Anagram Game 样例应用程序，这是一种在新建项目向导中以样例形式提供的 Java 桌面应用程序，带有简单的 GUI。创建了项目后，可以启动调试会话，并生成应用程序的 GUI 快照。

1. 从主菜单中选择“文件”>“新建项目”（Ctrl-Shift-N 组合键；在 Mac 上为 ⌘-Shift-N 组合键）以打开新建项目向导。
2. 在“样例”> "Java" 类别中选择 "Anagram Game"。单击 "Next"（下一步）。
3. 指定项目的位置。单击 "Finish"（完成）。

单击 "Finish"（完成），此时 IDE 将创建项目并在 "Projects"（项目）窗口中打开该项目。



. 单击工具栏中的“调试”按钮（Ctrl-F5 组合键；在 Mac 上为 ⌘-F5 组合键）以启动调试会话。

或者，在“项目”窗口中右键单击项目节点，然后选择“调试”。

启动该会话时，IDE 将启动 Anagram Game 应用程序，并打开“调试”窗口。

有关运行调试器的更多信息，请参见_使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG798[+关于运行和调试 Java 应用程序项目+]。



. 从主菜单中选择“调试”>“生成 GUI 快照”。

选择“生成 GUI 快照”时，IDE 将生成 GUI 的快照，并在主窗口中打开该快照。

[.feature]
--
image::images/debug-fullscreen.png[role="left", link="images/debug-fullscreen.png"]
--

在本可视调试器指南中，您不会用到“调试”窗口。


== 使用可视调试器

GUI 快照是一种可帮助您找到 GUI 组件的源代码的可视调试工具。GUI 组件的源代码有时可能很难找到，不过快照可以让您根据 GUI 找到代码，而不用搜索代码。您可以在快照中选择组件并从弹出式菜单中调用任务，以便查看组件的源代码、显示监听程序，并在组件上设置断点。


=== 找到组件的源代码

本练习将说明如何使用 GUI 快照导航至源代码中声明并定义组件的行。在 GUI 快照中选择组件时，可以使用弹出式菜单调用各种命令。

命令还可以通过“导航器”窗口调用，方法是右键单击组件，然后在弹出式菜单中选择命令。

1. 在 GUI 快照中，选择 "Guess" 按钮。

在快照中选择组件时，IDE 会在 "Properties"（属性）窗口中显示有关选定组件的详细信息。如果 "Properties"（属性）窗口不可见，您可以从主菜单中选择 "Window"（窗口）> "Properties"（属性）以打开该窗口。

image::images/debug-snapshot.png[title="GUI 快照"]

IDE 还会在 "Navigator"（导航器）窗口的窗体分层结构中显示组件的位置。

image::images/debug-navigator.png[title="GUI 快照"]


. 在快照中右键单击 "Guess" 按钮，然后从弹出式菜单中选择“转至组件声明”。

选择 "Go to Component Declaration"（转至组件声明）时，IDE 将在编辑器中打开源文件，然后将光标移至代码中声明  ``guessButton``  的行。

image::images/debug-gotodeclaration.png[title="声明组件的代码行"]


. 在快照中再次右键单击 "Guess" 按钮，然后选择 "Go to Component Source"（转至组件源文件）。

选择 "Go to Component Source"（转至组件源文件）时，IDE 将在编辑器中打开源文件，然后将光标移至 JButton 组件源代码中的相应行。

image::images/debug-gotosource.png[title="组件的源代码行"]

可以使用 GUI 快照中的 "Go to Hierarchy Addition"（转至分层结构其他源文件）命令查找源代码中将组件添加到其容器的行。默认情况下禁用 "Go to Hierarchy Addition"（转至分层结构其他源文件）命令。您可以在 "Options"（选项）窗口中启用此命令。

1. 打开 "Options"（选项）窗口。
2. 单击 "Options"（选项）窗口中的 "Java" 类别下的 "Java Debugger"（Java 调试器）标签。

*注：*在 NetBeans IDE 7.1 中，"Java Debugger"（Java 调试器）标签位于 "Options"（选项）窗口中的 "Miscellaneous"（其他）类别下。



. 在类别列表中选择“可视调试”，然后选择*跟踪组件分层结构更改的位置*。单击 "OK"（确定）。


. 停止调试会话（如果正在运行）。

*注：*在 "Options"（选项）窗口中启用此命令后，需要重新启动调试会话并生成新的 GUI 快照，然后才能使用 "Go to Hierarchy Addition"（转至分层结构其他源文件）命令。



. 启动新的调试会话并生成 GUI 快照。


. 在 GUI 快照中右键单击组件，然后选择“转至分层结构其他源文件”。

IDE 将在编辑器中添加组件的行上打开源代码。

image::images/debug-hierarchy.png[title="将组件添加到容器中的源代码行"]


=== 浏览组件事件

本练习将演示如何使用 GUI 快照和 "Events"（事件）窗口浏览组件事件，便于您找到组件监听程序以及由组件触发的事件。

1. 在快照中右键单击 "Guess" 按钮，然后从弹出式菜单中选择 "Show Listeners"（显示监听程序）。

选择 "Show Listeners"（显示监听程序）时，IDE 将会打开 "Events"（事件）窗口。您可以看到 "Custom Listeners"（定制监听程序）节点已展开。

image::images/debug-customlisteners.png[title="将组件添加到容器中的源代码行"]


. 右键单击 "Custom Listeners"（定制监听程序）节点下方的 *com.toy.anagrams.ui.Anagrams$3*，然后在弹出式菜单中选择“转至组件源文件”。

源代码在编辑器中定义监听程序的行上打开。



. 在快照中选择空文本字段。

此外，也可以在“导航器”窗口中选择  ``guessedWord``  文本字段。

选择文本字段时，“事件”窗口中的项将会自动更改，以显示选定组件的监听程序。



. 在“事件”窗口中，双击 "Event Log"（事件日志）节点打开 "Select Listener"（选择监听程序）窗口。

此外，也可以右键单击 "Event Log"（事件日志）节点，然后从弹出式菜单中选择 "Set Logging Events"（设置日志记录事件）。



. 从对话框中选择  ``java.awt.event.KeyListener``  监听程序。单击 "OK"（确定）。
image::images/debug-select-listener.png[title="将组件添加到容器中的源代码行"]

此监听程序现在正在监听文本字段中的键盘事件。



. 在 Anagram Game 应用程序的文本字段中，键入一些字符。

在文本字段中键入字符时，将在事件日志中记录事件。如果展开 "Event Log"（事件日志）节点，您可以看到现在记录了每个击键。每次在 Anagram Game 应用程序文本字段中键入时，都会显示新事件。如果展开单个事件，例如  ``keyPressed`` ，日志中会显示该事件的属性。

image::images/debug-eventlog.png[title="将组件添加到容器中的源代码行"]

如果针对事件展开“调用自...”节点，您可以看到该事件的堆栈跟踪。

本教程简单介绍了 IDE 中的可视调试器。通过可视调试器，可以轻松找到 GUI 组件的源代码和日志事件。这在调试 GUI 应用程序时极其有用。


link:https://netbeans.org/about/contact_form.html?to=3&subject=Feedback:%20Using%20the%20Visual%20Debugger[+发送有关此教程的反馈意见+]



== 另请参见

有关在 NetBeans IDE 中开发和测试 Java 应用程序的更多信息，请参见以下资源：

* link:gui-functionality.html[+构建 Java GUI 应用程序简介+]
* 演示：link:debug-visual-screencast.html[+使用可视调试器+]
* 演示：link:debug-multithreaded-screencast.html[+调试多线程应用程序+]
* 演示：link:debug-stepinto-screencast.html[+NetBeans 调试器中的可视“步入”操作+]
* 演示：link:debug-deadlock-screencast.html[+使用 NetBeans 调试器进行死锁检测+]
* 演示：link:debug-evaluator-screencast.html[+在 NetBeans 调试器中使用代码片段计算器+]
* link:../../trails/java-se.html[+基本 IDE 和 Java 编程学习资源+]
