除了编写高效的代码外,掌握调试技巧也是Java程序员可以使他们的生活更轻松的最有用的事情之一。这在当今的开发环境中尤其重要,在当今的开发环境中,软件世界越来越多地转向分布式体系结构和更多异步代码。尽管不可避免地会出现软件错误,但发现并修复复杂的应用程序构建中的错误变得越来越困难。当我们转向生产环境时,调试过程会更加痛苦。不幸的是,没有办法解决-您必须调试。那么,Java开发人员如何才能找到软件错误的根本原因并更快地解决它们?这篇文章汇集了在开发和生产环境中调试Java应用程序的一些最有效的技巧。
充分利用断点
让我们从断点开始- 断点是一项显而易见的重要功能,它为调试过程奠定了基础。断点使您可以暂停应用程序的执行,以便您可以分析程序的状态并查找代码行为异常的原因。
每个调试器都提供几种类型的断点,包括条件断点,异常断点,监视点和跟踪点。
学习如何以及何时应用不同类型的断点可以使您的调试过程更加流畅。值得一提的是,一些现代工具支持不间断的断点。这些使您可以在代码上放置断点并收集调试数据,而无需停止程序执行。
这是Rookout Web IDE上的示例断点,该断点设置在第41行。
显示逻辑结构
通常在变量视图中可用的“显示逻辑结构”功能在监视代码中Java类内的内容时非常有用。启用此功能后,变量列表将显示一个数组,该数组在调试的情况下更为有用。
这特别方便,如果您的代码缺少对象的toString()方法。
这是快照的快照,显示了调试透视图的Eclipse IDE“变量视图”上的功能。
变量视图还允许您在调试期间直接修改变量的值。由于您不必使用更改后的输入数据重新启动调试会话,因此可以节省大量时间。
掌握在代码库中导航的技巧
每个Java调试器都提供许多功能,这些功能允许开发人员在调试时浏览其代码的不同部分。其中一些包括逐行,跨步,跨步和逐行返回,可以安全地假设每个人都知道并使用它们。
除这些之外,请考虑合并以下内容:
1.拖放到框架 -此功能用于跳回到堆栈框架中的某个点。如果您错过了某个时间点并需要回到过去,则只需使用逐帧显示功能。
2.逐步筛选 -逐步筛选允许您在调试过程中跳过某些软件包。当您只需过滤掉不需要的类型时,就不必浏览JDK系统的所有类。
为了提高浏览代码的速度,您应该掌握最重要的功能键的快捷方式。这些包括:
1.F5进入
2.F6越过
3.F7步进返回
4.F8运行直到到达下一个断点
尽管调试快捷方式可能因一个IDE的不同而有所不同,但记住它们将消除您不时使用鼠标的需要。
了解如何解决死锁
形成循环依赖关系后,如果永久阻塞两个或多个线程,则会发生死锁情况,如下所示。
一组Java线程通常正在等待另一个线程拥有的资源,这种情况可能导致应用程序完全停止。调试jstack死锁可能非常具有挑战性,因为它们不会表现出诸如内存,CPU或其他操作系统指标突然增加的症状。
此外,它们往往表现在最恶劣的条件下,例如繁重的生产负载条件,这些条件很难复制。
解决jstack 死锁情况有多种方法。首先,您可以在JVM集群中捕获多个线程转储,以推断线程模式。在这种情况下,仅分析静态线程转储可能是不够的。
根据JVM集群的大小,您可能需要拖曳多个文件,这通常很费力且费时。
更好的方法是使用应用程序监视解决方案,该解决方案提供隔离线程死锁所需的JV级和代码级可见性。幸运的是,有一些创新工具可以帮助您解决这一问题,包括一些现代的高级调试器以及商业化的APM工具。
使用这些工具来获得对Java代码的可视性并隔离错误,可以减少本可以花费在手动分析和预后上的时间。
利用生产调试器的力量
大多数开发人员通常遵循的典型调试流程包括复制环境,隔离错误,然后应用修复程序。
但是,这并非总是在每种生产环境中都可行。在这种情况下,开发人员可以依靠快速的生产调试器来获得无缝的体验。
退出功能是一种功能强大的工具,可让您从实时应用程序中收集调试数据,而无需更改应用程序的状态或流控制。
使用Rookout,您可以设置不间断的断点来获取完整的堆栈跟踪,捕获实时变量或调试所需的任何其他应用程序数据。
因此,与其使用高过载监视解决方案进行生产调试,不如使用Rookout之类的工具,这些工具可提供调试实时应用程序所需的一切,而无需重新部署或编写新代码。
无论您是在无服务器应用程序还是在容器化应用程序上工作,Rookout都将是您调试库中的绝佳选择。
不要忘了远程调试
NetBeans,Eclipse,Intellij IDEA和Visual Studio等绝大多数顶级IDE支持远程调试,该技术允许您调试在另一台计算机上运行的Java代码。
在目标系统不支持本地调试的情况下,或者在缺乏足够资源来运行调试器的系统上,这尤其重要。
要执行远程调试,必须提供调试器将用于连接到远程端口的配置详细信息。例如,如果您使用的是Eclipse,则应提供以下配置以成功启动远程调试会话。
对生产环境中的错误进行故障排除时,远程调试也很方便,在这种情况下,开发人员需要连接到应用程序并远程修复错误。
最后,请记住,调试有时可能比实际实现花费更多时间。在磨练Java调试技能时,请始终努力编写干净,高效的代码-在进行调试时会有所收获。
当事情似乎失控时,总是值得休息一下。错误是编程难题,许多程序员已经解决了这些难题,而又没有靠近计算机。
使用以上策略可以减轻您的Java调试经验。以上即是关于加快Java调试的技巧的全部内容介绍,想了解更多关于加快Java开发的信息,请继续关注中培教育。