java调试_深入Java调试

本文深入讲解Java调试技巧,包括断点、步骤过滤器、条件断点等,以及在生产环境中调试的最佳实践,如日志记录、远程调试和错误追踪。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java调试

软件错误是开发过程中不可避免的一部分。 因此,Java调试是每个程序员都应具备的一项核心技能。

它不仅可以帮助您了解程序流程,还可以提高代码质量。 最后,它提高了您作为开发人员解决问题的能力,并最终提供了质量更高的软件。

本文深入探讨了Java调试的一些最重要的技巧和技术。 在生产环境中调试Java时,我们还将介绍最佳实践。

项目的Java调试

本节汇总了调试Java项目时要使用的一些技巧和窍门,包括断点,步骤过滤器,拖放到框架等。 即使在最复杂的情​​况下,也可以应用这些方法。

条件断点

断点用于指定调试时程序执行应停止的点。 通过暂时中止执行,您可以调查程序的字段和变量,更改其值等等。 在本文中,示例在Eclipse上运行,但是相同的概念可以应用于其他Java IDE。

条件断点设置为在满足特定条件时触发,以便您可以检查程序的状态,调用堆栈甚至是贵重物品的值。 在旨在计算音乐专辑评分或分数的几何平均值的程序中,我们可以设置条件断点。

该程序一目了然并且运行良好,但是如果返回0,则其中一张专辑的评分可能为0。 在for循环中放置一个简单的条件断点意味着程序将停止太多次(想象一下,当我们有数百张专辑时)。

在这种情况下,解决方案是将album.getRating().score == 0指定为断点的基本条件。 这将暂停在虚假或零评级专辑上的执行。

更多类型的断点

除了上面介绍的断点类型之外,还有其他类型的断点,但是这取决于您使用的Java IDE。 它们包括:

  • 基于事件的断点 -这些断点与事件相关,通常在遇到调试器识别的事件时触发。
  • 现场观察点 –这种类型的br
  • 每当给定字段或表达式的值更改时,eakpoint都会停止执行程序。 调试时,可以指定字段观察点以在读取,修改或同时读取和/或表达式时停止执行。
  • 方法断点 -用于在到达或退出指定方法或其实现时挂起程序。 这使您可以检查特定方法的进入或退出条件。
  • 行断点 -暂停执行
  • 到达断点中设置的特定代码行时的代码。

使用转出使使用断点更容易

Rookout是下一代调试平台,旨在帮助开发人员在程序代码中添加不间断的断点,以便他们可以收集所需的任何类型的数据。 它允许您指定规则,以完善何时或如何触发断点的条件。

借助断点上的断点进行调试的一件很酷的事情是它的断点状态功能–一个简单的可视指示器,可提供有关断点行为方式的快速反馈。 断点状态显示为断点旁边(在右侧窗格中)的警告标志或灯泡。

转换中的断点状态有五种类型,分别是:

  • 活动(纯紫色)
  • 待处理(空心紫色)
  • 警告(带三角形的纯紫色)
  • 错误(空心紫色,带有三角形)
  • 残障人士(空心灰色)

断点状态功能使您甚至可以在收到日志行或调试消息之前就对程序有所了解。 此信息使您的调试更加容易。

阶跃滤波器

通过步骤筛选,可以定义在调试期间可以跳过的程序包。 当您需要从一个类转换到另一个类,访问外部库或使用框架而不测试框架的类时,这一点尤其重要。

通过使用步骤过滤器功能限制转换,可以跳过特定的程序包。 在Eclipse中,可以通过路径窗口首选项>> Java调试>>步骤过滤来配置步骤过滤器

放到框架

此技术使您可以在调试过程中选择并重新运行程序的一部分。 您可以选择调用堆栈中的任何帧,并将调试器设置为从该点重新启动。

要使用此功能,请在堆栈中选择一个框架或一个关卡,然后在“调试”视图中单击“ 放置到框架”按钮。

尽管此功能执行某种后退或重置,但它不会影响您的字段或现有数据。 例如,如果您将一些条目写入数据库,然后下降到上一个级别或框架,则这些条目仍将保留在数据库中。

远程调试

大多数Java IDE(例如Eclipse)允许开发人员调试在另一台设备或Java虚拟机(JVM)上运行的应用程序。 但是,您将需要使用某些标志来启动Java程序。

下面的代码片段演示了如何完成此操作:

Eclipse用户可以输入主机名和端口号进行连接以进行远程调试 ,如下快照所示:

在生产中调试Java

当今的软件开发环境节奏如此之快,因此研发团队一直在努力通过将代码更快地投入生产来满足这些需求。 但是,无论您的测试过程有多严格,有时都会出错。

此外,当代码投入生产且实际数据正在系统中流动时,情况可能会很快消失。 为了在系统扩展时保持领先地位,解决应用程序中的潜在漏洞很重要。

每个Java开发人员都可以实施以下策略:

  • 识别何时发生错误
  • 评估错误对优先级的严重程度
  • 找出导致程序运行错误的状态
  • 接下来,追踪并解决根本原因
  • 最后,部署有效的修补程序

除了使用上面的五步策略之外, 还应该遵循一些最佳的生产调试实践

提升日志记录级别

如果错误日志包含足够详细的消息,则调试应用程序会更容易。 在大多数情况下,错误消息不能提供足够的上下文,因此程序员应增加日志级别。

这使您能够捕获整个上下文并了解到底是什么导致了错误。 每条日志行都应帮助您跟踪错误的根本原因。

跟踪错误发生的一种实用但经常未充分利用的方法是在每个线程的应用程序入口点生成UUID。 理想情况下,您可以按如下所示格式化线程名称:

因此,您的应用程序不会产生像“ pool-7-thread-22”之类的匿名名称,而是创建以“ threadName: pool-7-thread-22, UUID: EB85GTA, MsgType: AnalyzeGraph, MsgID: 415669, 29/03/2020 04:44 ”。

集中日志

在生产期间或应用程序生命周期的任何其他阶段处理错误时, 有效的日志记录机制应该是优先事项。

在会话期间记录所有重要事件并将日志存储在集中式服务器中进行分析可以使调试更加容易。

它还可以帮助您在跟踪关键产品指标时,关注应用程序出现问题的情况。

检查堆栈跟踪和其他日志

调试异常时, 堆栈跟踪会派上用场。 它们可以帮助您确定程序崩溃时调用了哪些函数。

使用堆栈跟踪,更容易找出问题所在,因为您可以查看导致异常的调用顺序。

下面的代码片段可以使用异常类中的printStack()方法打印异常堆栈:

它产生以下结果:

复制实例

保留日志后,重要的是要复制情况/实例。 这可以通过创建类似的环境来完成,以便您可以在IDE中看到问题。

重现情况有助于解决错误,因为您可以更好地理解代码和环境。

结语

Java调试过程不必是一场噩梦。 您只需要具有创新的心态并使用正确的工具即可。 淘汰工作就是这样一种工具,可以帮助开发人员加快调试过程。 它旨在帮助您以更高的置信度,速度和准确性来识别,诊断和解决代码中的错误。

翻译自: https://hackernoon.com/diving-into-java-debugging-614q3y1c

java调试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值