iOS開發 常見日誌列印

2021-07-15 20:03:23 字數 1026 閱讀 9373

一、列印當前的函式和行號:

我們可以在列印時使用一些預編譯巨集作為列印引數,來列印當前的函式和行號。如:

nslog(@"%s:%d obj=%@", __func__, __line__, obj);
其中

func

和line

都是預編譯的巨集,編譯時會分別替換為當前函式和當前行號。 下面是一些常用於列印日誌的巨集。巨集說明

__func__ 

列印當前函式或方法,c字串

__line__ 

列印當前行號,整數

__file__ 

列印當前檔案路徑,c字串

__pretty_function__ 

列印當前函式或方法(在c++中會包含引數型別),c字串

二、如何列印乙個類名,訊息名,當前堆疊資訊?

你可以使用以下方法在執行時動態獲取這些資訊。

** 說明nsstringfromselector(sel) 

獲取selector的名字

nsstringfromselector(_cmd) 

獲取當前方法名

nsstringfromclass([object class]) 

獲取object的類名

[nsthread callstacksymbols] 

獲取當前執行緒的棧,是乙個nsarry,包含堆疊中所有函式名。

三、如何將日誌列印到乙個檔案?

可以使用freopen函式重定向標準輸出和標準出錯檔案。因為printf函式會向標準輸出(stdout)列印,而nslog函式會向標準出錯(stderr)列印。重新定向標準輸出(stdout)和標準出錯(stderr)到乙個檔案將會使他們列印日誌到乙個檔案中。

freopen("/tmp/log.txt", "a+", stdout);freopen("/tmp/log.txt", "a+", stderr);

iOS 列印日誌

簡單介紹以下幾個巨集 1 va args 是乙個可變引數的巨集,這個可變引數的巨集是新的c99規範中新增的,目前似乎只有gcc支援 vc6.0的編譯器不支援 巨集前面加上 的作用在於,當可變引數的個數為0時,這裡的 起到把前面多餘的 去掉,否則會編譯出錯。2 file 巨集在預編譯時會替換成當前的源...

iPhone開發 iOS中日誌列印Q A

q 如何列印當前的函式和行號?a 我們可以在列印時使用一些預編譯巨集作為列印引數,來列印當前的函式和行號。如 1 nslog s d obj func line obj 其中 func 和 line 都是預編譯的巨集,編譯時會分別替換為當前函式和當前行號。下面是一些常用於列印日誌的巨集。巨集說明 f...

iOS中日誌列印Q A

q 如何列印當前的函式和行號?a 我們可以在列印時使用一些預編譯巨集作為列印引數,來列印當前的函式和行號。如 1 nslog s d obj func line obj 其中 func 和 line 都是預編譯的巨集,編譯時會分別替換為當前函式和當前行號。下面是一些常用於列印日誌的巨集。巨集說明 f...