当前位置: 首页 > 图灵资讯 > 技术篇> 改进了&#printf&#调试

改进了&#printf&#调试

来源:图灵教育
时间:2024-08-22 20:51:05

阅读其他语言: 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;
}

注册断点

使用 print 语句调试的缺点之一是它们引入了手动管理费用。你不能快速打开和关闭它们,你永远不想在生产中意外妥协和运行它们。

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

改进了

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

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

改进了

注:注意注册表达式。评估副作用可能成为新错误或意外行为的来源。此外,当使用热代码时,它们会显著减慢您的程序速度。

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

改进了

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

改进了

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

频繁事件日志

对于程序运行过程中频繁发生的事件,记录每个单独的事件可能要花费太多。这不仅会导致控制台充满新闻,还会导致太多 i/o 互动也会显著减慢调试会话的速度。

改进了

对于此类事件,使用通行证计数 功能可能很有用。你可以在断点.

访问对话框中的它

改进了

一旦将pass 将count设置为特定值,每次n次命中时只会触发相应的断点,以确保记录不会干扰。

概括

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

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

  • debugger.godmode() – 用调试器破解 jvm 应用程序
  • 缓慢排除调试器的故障
  • 调试不活动的应用程序
  • createdirectories() 有什么问题吗? - cpu 配置文件指南

调试愉快!

以上是改进&#printf&#详情请关注图灵教育的其他相关文章!