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"),不管有么有 ,都输出。

  • 相关阅读:
    python 格式化打印
    微软开发工具包下载
    win7 Adobe flash player 无法在线更新
    MySQL5.7本地首次登录win10报错修改
    MySQL本地登录及数据库导入导出
    03蓝桥杯特训课笔记总结:
    03第八届蓝桥杯省赛真题- 2.等差素数列
    02填空题
    01蓝桥杯第七届 方格填数(dfs)
    63中国剩余定理
  • 原文地址:https://www.cnblogs.com/azureology/p/15048093.html
Copyright © 2011-2022 走看看