一、列印當前的函式和行號:
我們可以在列印時使用一些預編譯巨集作為列印引數,來列印當前的函式和行號。如:
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...