首页 Java java教程 改进了&#printf&#调试

改进了&#printf&#调试

Aug 21, 2024 am 06:01 AM

阅读其他语言: English Español 中文

“printf”调试是最常见的调试技术之一,特别受欢迎,因为大多数人在编写第一个程序时直观地学习它。

“printf”调试非常容易进行,因为您不需要任何特殊工具。当你处理第一个 bug 时,甚至在你还不知道什么是调试器之前,你自然会想到让你的程序一步步打印变量,这样你就可以在控制台中跟踪执行。

尽管它是最基本的调试技术之一,但经验丰富的开发人员也经常使用它。它可以帮助您调查任何类型的问题,例如次优例程、不一致的状态、多线程问题等等。

正如我已经提到的,这种技术不需要您使用任何特殊工具,例如 IDE。然而,如果您正在使用它,它可以让您更有效地记录程序状态。

注意:本文展示了 IntelliJ IDEA 的功能。其他 IDE 中可能有也可能没有类似的功能。如果您使用其他工具,请考虑检查其文档以查看这些功能是否也存在。

实时模板

IntelliJ IDEA 为最常见的调试日志记录模式提供实时模板。要使用实时模板进行调试日志记录,请键入相应的命令并按 Tab 键。IntelliJ IDEA 将生成打印语句并将其插入到光标处。

让我们看一些例子。

注册方法参数

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    // digite 'soutp' aqui, depois pressione Tab

    return null;
}
登录后复制

生成的代码:

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    System.out.println("in = " + in + ", mask = " + mask + ", newColor = " + newColor);

    return null;
}
登录后复制

寄存器值

public static double coolMethod(double parameter) {
    double a = Math.random();
    double b = Math.random();

    // digite 'soutv' aqui, pressione Tab e então selecione o valor

    return a * b * parameter;
}
登录后复制

生成的代码:

public static double coolMethod(double parameter) {
    double a = Math.random();
    double b = Math.random();

    System.out.println("b = " + b);

    return a * b * parameter;
}
登录后复制

注册方法条目

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    // digite 'soutm' aqui

    return null;
}
登录后复制

生成的代码:

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    System.out.println("ImageUtils.recolor");

    return null;
}
登录后复制

注册断点

使用打印语句进行调试的缺点之一是它们引入了手动管理的开销。您无法快速打开和关闭它们,并且您绝对不想意外妥协并在生产中运行它们。

因此,如果您需要记录某些内容以进行调试,我建议使用记录断点,因为它们更容易管理。

Depuração

要设置日志记录断点,请按住 Shift,然后单击选项卡。与常规断点不同,它不会暂停程序执行,而是打印到控制台。

默认情况下,这是一条消息,表明程序已到达此行。如果您希望记录当前堆栈跟踪或自定义表达式的结果,还可以使用断点设置中评估并记录复选框旁边的选项。

Depuração

注意:小心注册表达式。评估那些导致副作用的因素可能会成为新错误或意外行为的来源。此外,当在热代码中使用时,它们会显着减慢您的程序速度。

当记录断点变得很多时,您可以在断点对话框中跟踪和管理它们(运行 | 查看断点):

Depuração

您甚至可以为他们创建自定义组:

Depuração

这将帮助您集中管理断点。例如,您可以创建与特定错误相关的组并将其保存以供以后使用。问题解决后,禁用该组。这样,如果问题再次出现,您将不必从头开始重新创建所有内容。您只需再次重新激活群组即可。

频繁事件日志

对于程序执行期间大量发生的事件,记录每个单独的事件可能代价过高。这不仅会导致控制台充斥着消息,而且过多的 I/O 交互也会显着减慢调试会话的速度。

Depuração

对于此类事件,使用通过计数功能可能会很有用。您可以在 断点.

对话框中访问它。

Depuração

一旦将传递计数设置为特定值,相应的断点只会在第n次命中时触发,确保记录不会成为麻烦。

概括

无论您是插入打印语句还是设置日志断点进行调试,现代工具都具有改善调试体验的功能。通过这篇文章,我想确保您了解这些让整个过程更加愉快的小技巧。

如果您对更多与调试和分析相关的文章感兴趣,请查看我的其他一些文章:

  • Debugger.godMode() – 使用调试器破解 JVM 应用程序
  • 调试器缓慢问题排查
  • 调试不活动的应用程序
  • createDirectories() 有什么问题吗? - CPU 配置文件指南

调试愉快!

以上是改进了&#printf&#调试的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

2025年的前4个JavaScript框架:React,Angular,Vue,Svelte 2025年的前4个JavaScript框架:React,Angular,Vue,Svelte Mar 07, 2025 pm 06:09 PM

2025年的前4个JavaScript框架:React,Angular,Vue,Svelte

如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存? 如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存? Mar 17, 2025 pm 05:44 PM

如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?

Java的类负载机制如何起作用,包括不同的类载荷及其委托模型? Java的类负载机制如何起作用,包括不同的类载荷及其委托模型? Mar 17, 2025 pm 05:35 PM

Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?

Node.js 20:关键性能提升和新功能 Node.js 20:关键性能提升和新功能 Mar 07, 2025 pm 06:12 PM

Node.js 20:关键性能提升和新功能

冰山:数据湖桌的未来 冰山:数据湖桌的未来 Mar 07, 2025 pm 06:31 PM

冰山:数据湖桌的未来

Spring Boot Snakeyaml 2.0 CVE-2022-1471问题已修复 Spring Boot Snakeyaml 2.0 CVE-2022-1471问题已修复 Mar 07, 2025 pm 05:52 PM

Spring Boot Snakeyaml 2.0 CVE-2022-1471问题已修复

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射? 如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射? Mar 17, 2025 pm 05:43 PM

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?

如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案? 如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案? Mar 17, 2025 pm 05:46 PM

如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?

See all articles