我正在攻击OpenJDK7以实现算法。在执行此操作的过程中,我需要将调试信息输出到stdout。正如我在代码库中看到的,所有打印都是通过使用outputStream * - > print_cr()来完成的。我想知道为什么没有使用printf()?
我问这个的部分原因是因为我实际上使用了很多printf()调用。我一直在看到奇怪的错误,如随机内存损坏和随机JVM崩溃。我的printf()是否有可能是根本原因? (假设我的代码的逻辑当然没有错误)
答案 0 :(得分:2)
为什么没有使用printf()?
HotSpot不是直接使用stdio
,而是使用自己的打印和日志记录框架。这个额外的抽象层提供了以下好处:
在JDK 9中进一步改进了框架以支持JEP 158: Unified JVM Logging。
我的printf()是否有可能是根本原因?
不,除非printf
被滥用:例如:参数与格式说明符不匹配,或者在信号处理程序内调用printf
。否则,使用printf
进行调试是安全的。在使用HotSpot时我做了很多次。