首页 > 其他 > 详细

glog与stderr的奇怪bug

时间:2021-07-23 16:16:32      阅读:24      评论:0      收藏:0      [点我收藏+]

描述

有一个程序通过launcher启动(无终端)会间歇性卡死,用终端启动则表现正常,且注释掉代码中glog部分可以恢复正常。

分析

glog有一个FLAG叫做alsologtostderr
值为true的时候,日志信息同时输出到stderr及文件(默认值为 false)
而程序中有关parse存在错误,导致FLAG始终为true
出现大段log时会卡死

解释

这里引用一道题目完美解释stdout与stderr的区别。

我们知道,标准输出和标准错误默认都是将信息输出到终端上,那么他们有什么区别呢?让我们来看个题目:

问题:下面程序的输出是什么?(intel笔试2011)

int main(){
fprintf(stdout,"Hello ");
fprintf(stderr,"World!");
return0;
}

解答:这段代码的输出是什么呢?你可以快速的将代码敲入你电脑上(当然,拷贝更快),然后发现输出是

World!Hello

这是为什么呢?在默认情况下,stdout是行缓冲的,他的输出会放在一个buffer里面,只有到换行的时候,才会输出到屏幕。而stderr是无缓冲 的,会直接输出,举例来说就是printf(stdout, "xxxx") 和 printf(stdout, "xxxx\n"),前者会憋住,直到 遇到新行才会一起输出。而printf(stderr, "xxxxx"),不管有么有\n,都输出。

glog与stderr的奇怪bug

原文:https://www.cnblogs.com/azureology/p/15048093.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!