首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试: System.out.println()或not System.out.println()

调试: System.out.println()或not System.out.println()
EN

Stack Overflow用户
提问于 2011-01-04 08:20:52
回答 5查看 17.5K关注 0票数 4

这就是我的问题。更具体地说,我正在尝试习惯Eclipse的调试器,我想知道在某些情况下是否仍然可以打印到控制台,或者这是否被认为是一种应该完全避免的糟糕做法。另外,什么可以被认为是整体调试的好方法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-04 08:25:04

最好的选择是一个日志库(当然,这会给您的项目添加额外的依赖项)。例如,查看commons-logging。主要优点是,您可以在调试级别编写调试消息,并且在部署代码时,只需将记录器配置为跳过这些消息(而不是搜索代码中出现的所有System.out.println )。另一个很大的优点是,记录器通常可以配置为在任何地方写入(甚至发送电子邮件或SMS),也不需要接触您的代码。

票数 7
EN

Stack Overflow用户

发布于 2011-01-04 08:22:42

请改用System.err.println()

为什么?

System.out.println()通常被重定向到一个文件或另一个输出,而这几乎总是在控制台上打印出来。它更容易调试,也是正确的方法。

编辑(警告:主观):

既然你问到是否应该完全避免System.out.println:我不相信任何你必须always避免的事情,无论是使用goto的,崩溃的计算机与BSOD,或其他任何东西。有时你只需要一种快速而又肮脏的方法来快速完成小事情,而且无论“好”的方法有多好,简单的都不值得你花1个小时来尝试以“正确”的方式来做事情,而不是花5分钟来修复它。用你的判断力来决定是否应该使用某些东西,但不要为自己设定规则,比如“我永远不会使用goto!”。:)

编辑2(示例):

假设您正在调试一个崩溃的驱动程序,并且您怀疑正在执行一条不应该执行的if语句。不需要花费三个小时了解如何使用ZwRaiseHardError显示消息框,只需调用if内部的KeBugCheck并使该死的系统崩溃即可。当然,你会重启,但除非你的重启需要几个小时,否则你就节省了这么多时间。

票数 11
EN

Stack Overflow用户

发布于 2011-01-04 08:24:38

  1. 小问题:如果您的程序实际上通过System.out将一些有用的东西输出到控制台,那么您可能希望将调试信息打印到System.err
  2. You,通常应该尽可能多地进行调试(理想情况下,使用一些标准的记录器,如log4j)。这既简化了实际开发程序时的调试,也简化了生产环境中已经发布的代码的调试。好处是你的代码保持不变,你不需要添加debugf打印,但是默认情况下,日志记录配置可以关闭日志记录,直到它真正需要(或者至少降低日志级别)
  3. 就像一般简单的“把println扔到墙上”调试一样,它有时可能是最快的调试方法之一,尽管它绝不应该是唯一的/

为什么它可以是有用的?其中一个原因是,因为在调试器中运行Java程序可能比在调试器之外运行慢得多;或者因为您的bug出现在一个不能在您的Eclipse调试器中轻松复制的环境/情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4589623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档