Objective-C列印除錯資訊

山裡孩子往外走發表於2018-07-20

Objective-C除錯之列印呼叫方法或程式碼所在的行號

很多開發者會有這樣的疑問,在iOS開發或者MacOS開發中, 如何將上下文資訊(例如當前呼叫方法或程式碼所在的行號)新增到我的列印語句中?本文小試牛刀,提供相關的資訊。

我們知道,C前處理器提供了許多標準巨集,可以提供有關當前檔案、行號或函式的資訊。另外,Objective-C有_cmd隱式引數,它給出了當前方法的選擇器,以及將選擇器和類轉換為字串的函式。因此我們可以在NSLog語句中使用這些方法來在除錯或錯誤處理期間提供有用的上下文。

示例1:記錄當前方法和行號的示例。將其貼上到您的專案中,然後檢視它列印的內容!

NSMutableArray *someObject = [NSMutableArray array];
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
[someObject addObject:@"foo"];
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);

下表列出了最常用的巨集和表示式,這些巨集和表示式在日誌記錄語句中可能很有用。

表1:預定義的巨集和C/C++/Objective-C除錯函式

巨集格式說明符描述
__func__%s當前函式簽名。
__LINE__%d在原始碼中的所在行號
__FILE__%s所在原始碼檔案的全路徑
__PRETTY_FUNCTION__%s類似__func__,但包含c++程式碼中的詳細型別資訊

表2:OBjective-C中的除錯函式

函式名格式說明符描述
NSStringFromSelector(_cmd)%@當前選擇器的名字
NSStringFromClass([self class])%@當前物件所在的類名
[[NSString stringWithUTF8String:__FILE__] lastPathComponent]%@原始碼的檔名
[NSThread callStackSymbols]%@用於跟蹤當前堆疊的程式設計師可讀字串構成的NSArray。僅用於除錯,不要將其呈現給終端使用者或用於在程式中執行任何邏輯

相關文章