iOS中日誌列印Q A

2021-06-10 07:30:16 字數 1125 閱讀 1848

q:如何列印當前的函式和行號?

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

1

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

其中__func__和__line__都是預編譯的巨集,編譯時會分別替換為當前函式和當前行號。

下面是一些常用於列印日誌的巨集。巨集說明

__func__

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

__line__

列印當前行號,整數

__file__

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

__pretty_function__

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

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

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

**說明

nsstringfromselector(sel)

獲取selector的名字

nsstringfromselector(_cmd)

獲取當前方法名

nsstringfromclass([object class])

獲取object的類名

nsthread callstacksymbols]

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

q:如何將日誌列印到乙個檔案

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

1

2

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

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

**:

iOS中日誌列印Q A

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

iPhone開發 iOS中日誌列印Q A

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

iOS 列印日誌

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