阅读其他语言: 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&#详情请关注图灵教育的其他相关文章!