这就是我的问题。更具体地说,我正在尝试习惯Eclipse的调试器,我想知道在某些情况下是否仍然可以打印到控制台,或者这是否被认为是一种应该完全避免的糟糕做法。另外,什么可以被认为是整体调试的好方法?
发布于 2011-01-04 08:25:04
最好的选择是一个日志库(当然,这会给您的项目添加额外的依赖项)。例如,查看commons-logging。主要优点是,您可以在调试级别编写调试消息,并且在部署代码时,只需将记录器配置为跳过这些消息(而不是搜索代码中出现的所有System.out.println )。另一个很大的优点是,记录器通常可以配置为在任何地方写入(甚至发送电子邮件或SMS),也不需要接触您的代码。
发布于 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并使该死的系统崩溃即可。当然,你会重启,但除非你的重启需要几个小时,否则你就节省了这么多时间。
发布于 2011-01-04 08:24:38
System.errlog4j)。这既简化了实际开发程序时的调试,也简化了生产环境中已经发布的代码的调试。好处是你的代码保持不变,你不需要添加debugf打印,但是默认情况下,日志记录配置可以关闭日志记录,直到它真正需要(或者至少降低日志级别)println扔到墙上”调试一样,它有时可能是最快的调试方法之一,尽管它绝不应该是唯一的/为什么它可以是有用的?其中一个原因是,因为在调试器中运行Java程序可能比在调试器之外运行慢得多;或者因为您的bug出现在一个不能在您的Eclipse调试器中轻松复制的环境/情况。
https://stackoverflow.com/questions/4589623
复制相似问题