zoukankan      html  css  js  c++  java
  • glog与stderr的奇怪bug

    描述

    有一个程序通过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 "),前者会憋住,直到 遇到新行才会一起输出。而printf(stderr, "xxxxx"),不管有么有 ,都输出。

  • 相关阅读:
    《Maven实战》第6章 仓库
    Log4j2中的同步日志与异步日志
    CSDN VIP如何添加自定义栏目
    CSDN VIP如何添加引流自定义栏目
    kubernetes垃圾回收器GarbageCollector Controller源码分析(二)
    java图形验证码实现
    java这个404你能解决吗?
    innodb笔记
    java项目启动脚本
    服务器初始化脚本
  • 原文地址:https://www.cnblogs.com/azureology/p/15048093.html
Copyright © 2011-2022 走看看