ACE TRACE main 不列印資訊的原因

2021-06-17 22:07:00 字數 2425 閱讀 3353

我們知道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...