iOS開發- 日誌列印(常見)

來源:互聯網
上載者:User

iOS開發- 日誌列印(常見)

Q:如何列印當前的函數和行號?

A:我們可以在列印時使用一些先行編譯宏作為列印參數,來列印當前的函數和行號。如:

NSLog(@"%s:%d obj=%@", __func__, __LINE__, obj);


    NSLog(@"%s:%d obj=%@", __func__, __LINE__, self);    //輸出樣式:    //2015-01-06 17:13:17.852 justTest[15079:613]    // -[ViewController viewDidLoad]:38 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)到一個檔案將會使他們列印日誌到一個檔案中。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.