编写代码就成功了一半。仍需要使其正常工作。IDE 和调试工具在这方面为我们提供了很多帮助。
以 IntelliJ IDEA 为例,我建议熟悉如何了解代码运行时会发生什么情况。调试是一个广泛的主题,因此本评论不提供像潜水员那样的深度潜水。但我肯定希望浮潜)
接下来,我们需要在服务器上运行我们选择的项目。这个过程在项目本身的一个小文档中进行了描述:
之后,在服务器日志中我们可以看到新项目是如何“部署”的:
之后,我们进入该页面,我们应该显示一个带有“会员注册
如果一切顺利,我们将在下面看到一条相关消息:
按 Enter 键转到找到的源:
所以,我们看到注册时,调用了memberController.register , 显然,这一定是某种java类。点击
确实有这样一个类。让我们来看看吧。显然,应该有一个注册方法。点击
确实,我们找到了。显然,注册发生在memberRegistration.register中。按住 Ctrl 键并单击该方法即可“落入”其中:
现在让我们设置一个“断点”或断点。这是一个标记,告诉代码执行应该在哪里暂停。这一刻我们将有机会学到很多有趣的东西。要放置它,您需要单击行号右侧的位置。
在 http://localhost:8080/wildfly-hibernate4 页面上填写字段并单击注册按钮。面板上的idea图标会闪烁:
进入Idea,可以看到调试面板中有很多有趣的信息:
在这里您可以看到对象字段的值。例如,注册会员包括哪些内容:
伟大的。我们还能做什么?我们可以打开上下文菜单并选择“评估表达式”(或通过菜单“运行”->“评估表达式”)。更好的是,在调试器控制面板上:
这是断点处的一个超级酷的能力,可以访问该代码点有权访问的所有内容,执行可以在该点执行的任何代码。例如:
调试器控制面板上还有控制按钮,负责将程序流控制移至何处。是不是很神奇?)通过按 F8(Step Out)按钮,我们可以在不输入方法的情况下浏览代码。通过按 F9,我们停止使用调试器遍历代码行,并让调试器控制程序的进度。如果我们按 F7(单步执行),那么我们将浏览代码,输入一路上遇到的每个方法。对了,特别注意这个信息块:
这显示了我们所在的线程以及当前线程堆栈上的方法。但这还不是全部。为了方便起见,您可以打开框架选项卡。为此,必须启用它:
现在,在框架选项卡上,我们可以看到有关从方法到方法的转换的信息,因为 开始使用 Step Into 遍历代码。
正如我们所看到的,我们不能总是转移到程序当前正在执行的位置。我们现在位于“getDelegate:469,AbstractEntityManager(org.jboss.as.jpa.container)”。但事实上,我们正在执行中。这可以通过以下指定的类来证明:
让我们看看这个。我们知道,它指向当前对象。我们在 TransactionScopedEntityManager。为什么 Idea 不能向我们展示代码?事实上,IntelliJ Idea 目前不知道任何 TransactionScopedEntityManager,因为 它没有连接到我们的项目(它不在项目依赖项中)。当应用程序服务器运行时,其中运行着很多很多不同的库。但我们对他们知之甚少,因为…… 一般来说,我们不需要深入研究内部结构,我们只需要它能够工作即可。但有时工作或运动兴趣需要它。然后,您需要告知Idea有关该库的信息,以便它知道从哪里获取类代码。
现在,让我们等待结果。他不会让你久等)
现在,我们需要在某处找到它的源代码。并且有 2 个选项:
现在让我们继续描述依赖性。在此页面上您可以下载源代码。太好了,现在我们已经下载了代码。剩下的就是连接库了。连接起来极其简单。我们需要打开项目设置:
在那里,我们选择“Libraries”并将收到的源代码添加到“Sources”部分,在“Classes”部分中,我们指示我们使用 Far Manager 找到的 WildFly 目录中的库 jar 文件本身。之后,当我们通过 F7 导航时,我们将看到 AbstractEntityManager 和 TransactionScopedEntityManager 类的内容,并且还可以通过使用 Ctrl+N 按类搜索来获取。
现在,只有当名称为 Maximilian 时,断点才会触发。通过单击“更多”按钮,您将可以使用一组扩展的断点设置。
并为选定的异常类型创建新规则:
例如,对于 NPE:
#维亚切斯拉夫
介绍
编写代码的一部分是调试它。如果您的任务包括代码支持,那么将会有更多的调试。好吧,此外,在调试的帮助下,您可以深入检查所使用的库和框架的工作,就像您可以沉浸在别人的代码丛林中一样。对于我们的潜水,我们需要:- 开发环境:免费的IntelliJ Idea社区版
- 安装的Maven
- WildFly应用服务器12.0.0.Final
- 官方示例源码:快速入门源码
bin\standalone.bat
。 (!)从 --debug 参数开始很重要 。我们等待服务器启动。他们会写信给我们,告诉我们开始时间并注明时间。它看起来像这样:
\hibernate4\README.adoc
如本文档所示,我们需要在 hibernate4 目录中运行命令:mvn clean package wildfly:deploy
我们正在等待构建已成功完成的消息:
http://localhost:8080/wildfly-hibernate4
”表单的页面。所以,我们的实验准备工作已经完成,我们可以开始了))为了清晰起见,前面会有很多图片,所以做好准备)
远程调试
因此,我们需要配置 Debug 模式,以便我们的 IDE 控制应用服务器上代码的执行。IntelliJ Idea 有两个版本:免费(社区)和付费(终极)。后者可以以EAP的形式正式试用。在 Ultimate 版本中,一切都很简单 - 应用程序服务器可以在调试模式下直接从 IDE 启动。但在社区版本中,您需要手动执行一些操作。因此,让我们考虑一个更复杂的情况,即 社区版本中的设置。社区版本有一些限制。特别是,您无法从中运行应用程序服务器。但是您可以设置远程调试(远程调试),当单独的某个地方有一个正在运行的服务器以及我们需要的应用程序时。让我们使用此处的设置描述:IntelliJ Idea 社区版中的远程调试 Wildfly(为端口 8787 设置远程运行配置)。配置完成后,我们在调试模式下启动新配置:调试过程
让我们调试保存记录。为此,我们必须首先决定我们要探索的地方。从窗口来看,我们需要一个“注册”按钮。让我们在代码中找到它。所以,我们需要一个元素,它应该有文本:“Register”。或者她应该与这件事有关。单击Ctrl+Shift+F
并在引号中查找“注册”。我们看到index.xhtml上有一个。
Ctrl+N
并搜索:
Ctrl+F12
查找注册方法
连接第三方库进行调试
首先,我们自己需要了解需要连接的是什么类型的库。 第一种方法是最困难的——在网上搜索。找到结果的速度和结果很大程度上取决于项目的管理情况。例如,WildFly 有一个开放的存储库。因此,当我们谷歌“TransactionScopedEntityManager”时,我们将访问https://github.com/wildfly/wildfly/tree/master/jpa/subsystem,并发现我们需要wildfly-jpa。 第二种方法是正确的。服务器在哪里,看看那里。有多种方法可以帮助解决这个问题。例如,在 Windows 上,它可能是Far Manager。以下是搜索算法的示例。安装并启动它后,使用Tab 键切换到其中一个选项卡,使用Alt+F1
左侧选项卡或Alt+F2
右侧选项卡,然后选择我们在硬盘上所需的分区。安装后,Far Manager 目录本身很可能在 Far Manager 中打开。要转至磁盘根目录,请按Ctrl + \
。使用时,Alt+F
打开搜索窗口,开始输入目录名称,找到目录后按 Enter。这个搜索很聪明,并突出显示那些与搜索文本匹配的目录。如果输入的字符没有文件夹,则无法输入此类字符。这样我们就进入了应用服务器目录。假设我们不知道模块位于服务器上的位置。也许这是您一生中第一次听说某种野蝇。因此,请立即单击此处Alt+F7
搜索文件。因此,逻辑表明:我们需要一个包含库的文件。也就是说,我们需要一个罐子。里面应该有一个TransactionScopedEntityManager类。因为 class = file,然后查找“contains”。也就是说,像这样:
- 超级有用的versioneye.com
- 中央Maven 存储库
GO TO FULL VERSION