2012-12-05 63 views
0

我剛從一個離開公司的人那裏繼承了一個圖書館。它是用C++編寫的,在整個代碼中都使用g_print()。我知道庫正在運行,但我看不到任何調試輸出。我需要做些什麼才能讓它出現? g_print()只能在調試版本中工作嗎?還有其他建議嗎?如何讓g_print()出現?

+0

我認爲這是油嘴的一部分? http://developer.gnome.org/glib/2.31/glib-Warnings-and-Assertions.html#g-print – parsley72

+1

'g_print'僅用於調試輸出嗎?如果是這樣,請將其更改爲'g_message'。 (或者,如果你有時間,可以到'g_log'。) –

+0

@ parsley72:糟糕 - 我錯過了'glib'標籤。對不起'回合。 –

回答

0

我最終使用g_log(由上述David Schwartz所建議的),那麼重寫它作爲C - gtk Logging overriding指定:

void log_handler(const gchar *log_domain, 
       GLogLevelFlags log_level, 
       const gchar *message, 
       gpointer user_data) 
{ 
    FILE *logfile = fopen ("/tmp/debug.log", "a"); 
    if (logfile == NULL) 
    { 
     /* Fall back to console output if unable to open file */ 
     printf ("Rerouted to console: %s", message); 
     return; 
    } 

    fprintf (logfile, "%s", message); 
    fclose (logfile); 
} 

uint handlerid = g_log_set_handler(NULL, 
    G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, 
    log_handler, 
    NULL); 

if (!g_main_loop_is_running()) 
{ 
    g_log(G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "g_main_loop_is_running() returned 0\n"); 
} 

if (handlerid != 0) 
{ 
    g_log_remove_handler(NULL, handlerid); 
    handlerid = 0; 
}