我們知道ace日誌巨集是否產生日誌方法呼叫,由三個配置在編譯時的值決定:ace_ntrace、ace_ndebug,以及ace_nlogging。要啟用相應的日誌巨集,需要定義相應的巨集。ace_ntrace預設為1(禁用),ace_ndebug和ace_nlogging預設為未定義(啟用)。
通過在包含標頭檔案「log_msg.h」標頭檔案前定義ace_ntrace為0可以啟用ace_trace日誌巨集。但在下面的簡單**示例中,並不能成功輸出跟蹤日誌:
#include"stdafx.h"
#defineace_ntrace 0
#include"ace/log_msg.h"
voidfun ()
int_tmain(intargc, _tchar* argv)
}
ace_trace類使用ace_debug巨集,以日誌嚴重級別lm_trace輸出跟蹤資訊。ace_debug巨集由ace_nlogging控制是否啟用,預設情況ace_debug是啟用的。對於日誌嚴重級別,預設情況下啟動所有級別。因此,不輸出跟蹤日誌的原因一定是上面**中的if條件不滿足。
下面我們來看if中的兩個條件。
enable_tracing為ace_trace類中的靜態變數:
static
boolenable_tracing_;
通過呼叫ace_trace::is_tracing()可以獲取該值,除錯發現該值為true。
注:該值預設為true。通過呼叫ace_trace::start_tracing()設定該值為true,通過呼叫ace_trace::stop_tracing()設定該值為false。
下面來看一下ace_os_object_manager::starting_up()函式的定義:
ace_os_object_manager::shutting_down (void)
; \inlineintace_main::run_i (intargc,char*argv) \
\ace_end_versioned_namespace_decl \
int\
ace_main (intargc,char*argv)/* user's entry point, e.g., wmain */\
\int\
ace_main_i
下面來解釋一下這個巨集:
這個巨集首先前置宣告了兩個函式
intace_main_i (int, char*);
intace_os_main_i (ace_main_base&,int, char*);
注:這裡忽略了ace_export關鍵字,實際上是跟作業系統相關符號匯入匯出宣告,這裡可暫時先理解為前置宣告,不影響對main巨集的理解。
接下來的幾行定義了乙個類ace_main,這個類繼承自ace_main_base,並實現了虛函式int run_i (int, char *),這個函式在繼承來的ace_main_base::run()函式中被呼叫。接下來的int ace_main函式才是我們常見的main函式,ace_main是乙個巨集,被定義為main。在ace_main中我們宣告了乙個ace_main的例項,呼叫這個物件的run函式。而我們的ace_tmain函式被定義為乙個名為ace_main_i的函式,這個函式在ace_main::run_i中被呼叫。總結一些我們的函式呼叫序列:
ace_main是我們的程式入口
| | ace_main是我們的程式入口
| |v
ace_main_base::run
| || |
vace_main::run_i
| || |
vintace_main_i (int, char*)
| | 這就是我們寫的ace_tmain主函式
| |v
接下來我們看一下ace_main_base的建構函式:
ace_main_base::ace_main_base ()
{ace::init ();
一切真相大白。之所以使用ace_tmain,只不過是讓ace自己幫我們呼叫ace::init (),而省去手工呼叫的麻煩。
#define ace_ntrace 0
NSLog不列印設定
我們可以在發布版本前先把所有nslog語句注釋掉,等以後要除錯時,再取消這些注釋,這實在是一件無趣而耗時的事!還好,還有更優雅的解決方法,就是在專案的prefix.pch檔案裡加入下面一段 加入後,nslog就只在debug下有輸出,release下不輸出了。在 prefix.pch pch全稱是 ...
iOS開發 NSLog不列印設定
我們可以在發布版本前先把所有nslog語句注釋掉,等以後要除錯時,再取消這些注釋,這實在是一件無趣而耗時的事!還好,還有更優雅的解決方法,就是在專案的prefix.pch檔案裡加入下面一段 加入後,nslog就只在debug下有輸出,release下不輸出了。在 prefix.pch pch全稱是 ...
iOS發布時設定不列印log
前提 在開發過程,我們為了除錯經常要列印日誌資訊,但在發布版本時,列印資訊是會消耗應用效能的。情況一 初始化專案時,在預編譯檔案prefixheader.pch中做判斷,把nslog替換成自己的log,t除錯時使用自己的log,如下 ifdef debug define wslog nslog va...