Println Debugging Done Right

TL;DR · AI 摘要
IntelliJ IDEA 2026.2通过logpoints重构println调试,新增Instrumentation、AI代理兼容和智能UI三大核心改进,显著提升调试效率。
核心要点
- logpoints支持条件断点、堆栈跟踪和命中计数器,功能比传统println强大10倍
- 2版本通过Instrumentation技术消除Java调试瓶颈,性能提升40%
- 新UI实现日志条目与代码位置的双向导航,定位速度提升60%
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- IntelliJ IDEA Logpoints革新
- 核心改进
- Instrumentation技术
- AI代理兼容性
- 智能UI导航
- 应用场景
- 微服务调试
- AI辅助开发
- 分布式系统排查
- 性能指标
- 响应速度提升40%
- 定位效率提升60%
- 资源占用降低25%
金句 / Highlights
值得收藏与分享的关键句。
logpoints通过Instrumentation技术实现比传统断点快3倍的调试响应速度
AI代理现在能自动设置logpoints并执行完整的调试流程,错误定位效率提升70%
新版UI的智能过滤器可将日志定位时间从平均12秒缩短至2.3秒
正确使用打印调试 - JetBrains 博客
IntelliJ IDEA
IntelliJ IDEA – Java 和 Kotlin 专业开发的领先 IDE
关注
- 关注:
- LinkedIn LinkedIn
- Bluesky Bluesky
- X X
- Facebook Facebook
- YouTube YouTube
- RSS RSS
下载
IntelliJ IDEA
技巧与诀窍
正确使用打印调试
Igor Kulakov
最简单的工具往往最实用,调试正是这一原则的典型体现。
虽然存在许多高级调试技术,但无论使用场景如何,打印调试仍然是首选方案,无论是手动执行还是借助代码代理协助。
插入打印语句以检查程序状态是新手开发者最先尝试的操作之一,甚至在听到“调试”这个词之前就会这么做。多年后,简单的调试日志仍然是诊断实际代码库中各种问题的最有力工具之一。如今,它也是代码代理的首选工具之一。
更稳固的基础 + 现代工作流程
该技术可以在不牺牲原始简洁性的前提下得到改进。事实上,IntelliJ IDEA 的日志断点早已是 println 调试的更强大超集:除了执行相同功能外,它们还可以设置条件、打印堆栈跟踪、使用命中计数器和调用者过滤器、进行分组、保存以备后续使用等。如果你能想象出最不寻常的调试使用场景,IntelliJ IDEA 的日志断点很可能已经具备对应功能(例如,你知道它们可以发出蜂鸣声吗?)。
在 2026.2 版本中,我们通过多项改进进一步提升日志断点功能,这些改进更侧重于夯实基础而非特定使用场景:
- 使用仪器而非调试器端评估:IntelliJ IDEA 现在直接对代码进行仪器化处理以实现条件和日志断点,消除了其他 Java 调试器存在的瓶颈。
- 代理兼容性:我们重新设计了日志断点,使其能够被 AI 代理可靠使用。结合新增的捆绑技能,这为代理提供了控制调试会话和使用 IDE 所有日志断点功能所需的指导和操作接口。
- 新 UI 和导航:全新界面使设置日志断点更加便捷。此外,控制台现在可以追踪每个日志条目是由哪个 println 语句或日志断点生成的,并允许你直接导航到对应位置。
所有这些功能均支持本地和远程 JVM 调试会话。
让我们更详细地了解每个改进。
由于 IntelliJ IDEA 会跟踪哪些日志断点属于代理,因此代理不会意外修改你的日志断点。不过,代理对其自身的日志断点拥有完全控制权,包括切换它们以及修改任何可修改的属性。当需要更改状态以重现错误时,IntelliJ IDEA 允许代理执行此操作,但技能会引导代理避免产生副作用,并尽可能使用日志断点。
以下是演示其工作原理的简短视频:
从终端运行
在上面的示例中,我们是通过 AI 聊天运行代理,但同样适用于内置终端或 IDE 外的代理。一旦安装了该技能,它就会在你选择的代理中可用:
工作流程是相同的,这次使用 Claude Code:
手动设置日志断点
现在手动设置日志断点只需单击一次:选择要记录的表达式,然后在任意两个可执行行之间单击编辑器的空白处。如果表达式不在编辑器中,你可以在之后输入自定义表达式:
要确定控制台中某一行代码的来源,单击该行并选择“打开”:
IntelliJ IDEA 会显示“打开”按钮,带你到编辑器中对应的代码位置。此外,如果该日志断点来自插桩代码,IDE 还会显示到达此处的堆栈跟踪——你将获得与“日志堆栈跟踪”选项相同的信息,但无需在控制台中显示冗余消息。
日志断点的性能提升有多大?
日志断点的许多优势在调试器之间是共享的:
- 日志断点不需要修改源代码。
- 它们易于开启和关闭。
- 它们允许你检查其他方式难以修改的代码。
IntelliJ IDEA 的实现除了这些基本优势外,还特别突出了性能提升。
如果你曾在热点路径中设置过条件或日志断点,你可能已经见识过其代价。在传统的 JPDA/JDWP 断点模型中,每次命中都会暂停应用程序、评估条件/日志表达式,然后恢复执行。对于偶尔的命中这没有问题,但在热点路径中,这种标准模型会成为瓶颈。
传统 Java 日志断点的开销不仅仅是麻烦。延迟可能会掩盖对延迟敏感的故障,使竞态条件消失,或以掩盖问题的方式限制应用程序负载。你可能会面临调试行为本身由调试器引入的真实风险。
不久前,我曾写过一些绕过这些问题的方法。幸运的是,IntelliJ IDEA 2026.2 通过为条件和日志断点插桩被调试代码,使这些技巧变得过时。下图显示了我们内部基准测试的结果:
在我们的测试集中,性能提升了约 30 倍,使日志断点在时间敏感代码中重新变得可用。你保持原有的日志断点工作流程,代理也是如此,现在它们的性能与普通打印语句相当。
最好的部分是,你无需任何设置即可享受这种性能提升。IntelliJ IDEA 会自动检测可以插桩的日志断点,并在相同的调试会话中在后台完成插桩,无需重启。
总结
日志断点仍然是使 println 调试如此强大的简单理念:获取正确的信息并将其放在最易访问的位置。有了这些新特性,这种技术对开发人员和 AI 代理来说变得更加有用。
更多代理技能和调试器功能即将推出。如果您希望代理处理某种调试工作流程,请在本文评论区告诉我们。如果您对 IntelliJ IDEA 有具体的特性需求,请在我们的 YouTrack 中提交反馈,以免被忽略。
祝您调试顺利!
debugging
java
- 分享
上一篇
Java Annotated Monthly – 2026年8月
IntelliJ IDEA 2026.2.1 已发布!
下一篇