TL; DR
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
รายละเอียด
Apple มีหน้าถาม & ตอบทางเทคนิค: QA1669 - ฉันจะเพิ่มข้อมูลบริบท - เช่นวิธีปัจจุบันหรือหมายเลขบรรทัด - ลงในคำชี้แจงการบันทึกของฉันได้อย่างไร
เพื่อช่วยในการบันทึก:
- ตัวประมวลผลล่วงหน้า C จัดเตรียมมาโครสองสามตัว
- Objective-C ให้การแสดงออก (วิธีการ)
- ผ่านอาร์กิวเมนต์โดยนัยสำหรับตัวเลือกของวิธีการปัจจุบัน:
_cmd
ตามคำตอบอื่น ๆ ที่ระบุไว้เพื่อรับชื่อวิธีปัจจุบันเพียงโทร:
NSStringFromSelector(_cmd)
ในการรับชื่อวิธีการปัจจุบันและหมายเลขบรรทัดปัจจุบันให้ใช้มาโครสองตัวนี้__func__
และ__LINE__
ตามที่เห็นที่นี่:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
อีกตัวอย่างหนึ่ง…ตัวอย่างโค้ดที่ฉันเก็บไว้ในรหัสตัวอย่างโค้ดของ Xcode:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
…และ TRACE แทนที่จะเป็น ERROR …
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
…และอีกอันที่ยาวกว่าโดยใช้คำอธิบายแบบนุ่มนวลผ่านค่า ( [rows count]
) ...
NSLog( @"TRACE %@ METHOD %s:%d.", [NSString stringWithFormat:@"'Table of Contents.txt' file's count of Linefeed-delimited rows: %u.", [rows count]] , __func__, __LINE__ );
มาโครตัวประมวลผลล่วงหน้าสำหรับการบันทึก
สังเกตการใช้อักขระขีดล่างคู่รอบทั้งสองด้านของแมโคร
| มาโคร | รูปแบบ | ลักษณะ
__func__% s ลายเซ็นฟังก์ชั่นปัจจุบัน
__LINE__% d หมายเลขบรรทัดปัจจุบัน
__FILE__% s พา ธ เต็มไปยังไฟล์ต้นฉบับ
__PRETTY_FUNCTION__% s ไลค์ __func__ แต่รวมถึง verbose
พิมพ์ข้อมูลในรหัส C ++
นิพจน์สำหรับการบันทึก
| นิพจน์ | รูปแบบ | ลักษณะ
NSStringFromSelector (_cmd)% @ ชื่อของตัวเลือกปัจจุบัน
NSStringFromClass ([ระดับตนเอง])% @ ชื่อคลาสของวัตถุปัจจุบัน
[[NSString% @ ชื่อไฟล์รหัสต้นฉบับ
stringWithUTF8String: __ FILE__]
lastPathComponent]
[NSThread callStackSymbols]% @ NSArray ของการติดตามสแต็ก
กรอบการบันทึก
เฟรมเวิร์กการบันทึกบางอย่างอาจช่วยในการรับเมธอดหรือหมายเลขบรรทัดปัจจุบันเช่นกัน ฉันไม่แน่ใจเพราะฉันใช้กรอบการบันทึกที่ยอดเยี่ยมใน Java ( SLF4J + LogBack ) แต่ไม่ใช่ Cocoa
ดูคำถามนี้สำหรับลิงก์ไปยังกรอบการทำโกโก้ที่หลากหลาย
ชื่อของตัวเลือก
หากคุณมีตัวแปร Selector ( SEL ) คุณสามารถพิมพ์ชื่อเมธอด ("ข้อความ") ได้สองวิธีดังที่อธิบายไว้โดยโพสต์บล็อกCodec นี้:
- ใช้การโทร Objective-C ไปที่NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) );
- ใช้ straight C:
NSLog(@"%s", selector );
ข้อมูลนี้ดึงมาจากหน้าเอกสาร Apple ที่เชื่อมโยงตั้งแต่ 2013-07-19 หน้านั้นได้รับการปรับปรุงล่าสุดเมื่อวันที่ 2011-10-04
iPhone
โครงการสุดท้ายของฉันฉันทำสิ่งนี้ด้วยตนเอง ชอบที่จะเห็นคำตอบนี้