zoukankan      html  css  js  c++  java
  • 对于glog中ShutdownGoogleLogging后不能再次InitGoogleLogging问题的解决办法


    问题原因非常简单,utilities.cc文件中的ShutdownGoogleLoggingUtilities未对全局静态变量g_program_invocation_short_name重置为NULL,下面是相关的源代码,一看便知,解决办法就是加上:g_program_invocation_short_name = NULL;一句,由于是静态的全局变量,不能在自己程序中执行这个操作,除非改成非static全局变量。

    源码文件logging.cc
    1803 void InitGoogleLogging(const char* argv0) {
    1804   glog_internal_namespace_::InitGoogleLoggingUtilities(argv0);
    1805 }
    1806 
    1807 void ShutdownGoogleLogging() {
    1808   glog_internal_namespace_::ShutdownGoogleLoggingUtilities();
    1809   LogDestination::DeleteLogDestinations();
    1810   delete logging_directories_list;
    1811   logging_directories_list = NULL;
    1812 }

    源码文件src/utilities.cc
    57 static const char* g_program_invocation_short_name = NULL;

    167 bool IsGoogleLoggingInitialized() {
    168   return g_program_invocation_short_name != NULL;
    169 }

    316 void InitGoogleLoggingUtilities(const char* argv0) {
    317   CHECK(!IsGoogleLoggingInitialized())
    318       << "You called InitGoogleLogging() twice!";
    319   const char* slash = strrchr(argv0, '/');
    320 #ifdef OS_WINDOWS
    321   if (!slash)  slash = strrchr(argv0, '\\');
    322 #endif
    323   g_program_invocation_short_name = slash ? slash + 1 : argv0;
    324   g_main_thread_id = pthread_self();
    325 
    326 #ifdef HAVE_STACKTRACE
    327   InstallFailureFunction(&DumpStackTraceAndExit);
    328 #endif
    329 }
    330 
    331 void ShutdownGoogleLoggingUtilities() {
    332   CHECK(IsGoogleLoggingInitialized())
    333       << "You called ShutdownGoogleLogging() without calling InitGoogleLogging() first!";
    334 #ifdef HAVE_SYSLOG_H
    335   closelog();
    336 #endif
          g_program_invocation_short_name = NULL;
    337 }

  • 相关阅读:
    悬浮按钮
    C语言学习笔记
    python3之环境搭建以及基础语法
    设计模式之单例模式
    浅谈vuex
    用位运算替代js中的常见操作
    浅析Symbol
    egg.js源码解析之render()
    js的事件循环机制和任务队列
    浅谈js异步
  • 原文地址:https://www.cnblogs.com/aquester/p/9891750.html
Copyright © 2011-2022 走看看