<b>注:最近代碼已修複此bug</b>
<a href="http://code.google.com/p/google-glog/issues/detail?id=142" target="_blank">https://code.google.com/p/google-glog/issues/detail?id=142</a>
<a href="http://code.google.com/p/google-glog/source/browse/trunk/src/utilities.cc" target="_blank">https://code.google.com/p/google-glog/source/browse/trunk/src/utilities.cc</a>
問題原因非常簡單,utilities.cc檔案中的ShutdownGoogleLoggingUtilities未對全局靜态變量g_program_invocation_short_name重置為NULL,下面是相關的源代碼,一看便知,解決辦法就是加上:g_program_invocation_short_name = NULL;一句,由于是靜态的全局變量,不能在自己程式中執行這個操作,除非改成非static全局變量。
<b>源碼檔案logging.cc</b>
1803 void <b>InitGoogleLogging</b>(const char* argv0) {
1804 glog_internal_namespace_::InitGoogleLoggingUtilities(argv0);
1805 }
1806
1807 void <b>ShutdownGoogleLogging</b>() {
1808 glog_internal_namespace_::ShutdownGoogleLoggingUtilities();
1809 LogDestination::DeleteLogDestinations();
1810 delete logging_directories_list;
1811 logging_directories_list = NULL;
1812 }
<b>源碼檔案src/utilities.cc</b>
57 static const char* <b>g_program_invocation_short_name </b>= NULL;
167 bool <b>IsGoogleLoggingInitialized</b>() {
168 return g_program_invocation_short_name != NULL;
169 }
316 void <b>InitGoogleLoggingUtilities</b>(const char* argv0) {
317 CHECK(!IsGoogleLoggingInitialized())
318 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 <b>ShutdownGoogleLoggingUtilities</b>() {
332 CHECK(IsGoogleLoggingInitialized())
333 334 #ifdef HAVE_SYSLOG_H
335 closelog();
336 #endif
<b>g_program_invocation_short_name = NULL;</b>
337 }
閱讀(4925) | 評論(0) | 轉發(0) |