同样在这些强大的 IDE 和远程调试的日子里,这么多的日志记录真的需要吗?
是的,当然,尽管许多不熟练的开发人员犯的错误是尝试使用错误的方法修复错误,通常倾向于在应该调试时进行日志记录。每个都有一个地方,但至少有几个领域几乎总是需要记录:
- 用于检查实时代码中的问题,其中调试器暂停会影响计算结果(当然,在这样的实时过程中,日志记录会对时间产生轻微影响,但在很大程度上取决于软件)
- 对于发送给 beta 测试人员或其他可能无法访问调试器的同事的构建
- 用于将数据转储到在调试器中可能不容易查看的磁盘。例如,某些 IDE 无法正确解析 STL 结构。
- 获得程序正常流程的“感觉”
- 除了注释之外,为了使代码更具可读性,如下所示:
// 现在打开数据文件
fp = fopen("data.bin", "rb");
上面的注释可以很容易地放在日志调用中:
const char *kDataFile = "data.bin";
log("现在打开数据文件 %s", kDataFile);
fp = fopen(kDataFile, "rb");
也就是说,您在某些方面是正确的。将日志记录机制用作美化的堆栈跟踪记录器将生成质量非常差的日志文件,因为它没有为开发人员提供足够有用的故障点来检查。所以这里的关键显然是正确和谨慎地使用日志调用,我认为这归结为开发人员的自由裁量权。您需要考虑到您实际上是在为自己制作日志文件;您的用户并不关心它们,并且通常无论如何都会严重误解他们的内容,但您至少可以使用它们来确定您的程序行为不端的原因。
此外,日志文件很少会指出某个错误的直接来源。根据我的经验,它通常会提供一些关于如何复制错误的见解,然后通过复制或调试它的过程来找到问题的原因。