Saya sedang melakukan presentasi tentang debugging di Xcode dan ingin mendapatkan informasi lebih lanjut tentang penggunaan NSLog secara efisien.
Secara khusus, saya punya dua pertanyaan:
- apakah ada cara untuk dengan mudah NSLog nama metode / nomor baris saat ini?
- apakah ada cara untuk "menonaktifkan" semua NSLogs dengan mudah sebelum kompilasi untuk kode rilis?
objective-c
cocoa
cocoa-touch
xcode
nslog
kendali
sumber
sumber
Jawaban:
Berikut adalah beberapa makro yang berguna di sekitar NSLog yang sering saya gunakan:
Makro DLog hanya digunakan untuk output ketika variabel DEBUG diatur (-DDEBUG di flag C proyek untuk konfigurasi debug).
ALog akan selalu menampilkan teks (seperti NSLog biasa).
Output (mis. ALog (@ "Hello world")) akan terlihat seperti ini:
sumber
(@"%s [Line %d] " fmt)
menyebabkanfmt
ditambahkan ke string kontrol? Saya belum melihat sintaks ini selain makro debug ini.Saya telah mengambil
DLog
danALog
dari atas, dan menambahkanULog
yang memunculkanUIAlertView
pesan.Untuk meringkas:
DLog
akan menampilkan sepertiNSLog
hanya ketika variabel DEBUG diaturALog
akan selalu menampilkan sukaNSLog
ULog
akan menampilkanUIAlertView
satu - satunya ketika variabel DEBUG diaturSeperti inilah tampilannya:
+1 Diederik
sumber
DLog
pernyataan. Ini berguna karena jika Anda melakukannya, dalam rilis build,DLog
dikompilasi menjadi nol, dan Anda akan dibiarkan dengan titik koma menggantung di kode Anda. Ini bukan kesalahan, tapi itu bisa menimbulkan peringatan, tergantung pada pengaturan Anda, jika itu mengikuti titik koma lain.Output nama file, nomor baris, dan nama fungsi:
__FUNCTION__
di C ++ menunjukkan nama hancur menunjukkan nama__PRETTY_FUNCTION__
fungsi yang bagus, dalam kakao mereka terlihat sama.Saya tidak yakin apa cara yang tepat untuk menonaktifkan NSLog, saya lakukan:
Dan tidak ada output logging muncul, namun saya tidak tahu apakah ini memiliki efek samping.
sumber
Di sini satu koleksi besar konstanta debug yang kami gunakan. Nikmati.
sumber
Ada trik baru yang tidak diberikan jawaban. Anda dapat menggunakan
printf
sebagai gantinyaNSLog
. Ini akan memberi Anda log bersih:Dengan
NSLog
Anda mendapatkan hal-hal seperti ini:Tetapi dengan
printf
Anda hanya mendapatkan:Gunakan kode ini
sumber
Jawaban saya untuk pertanyaan ini mungkin membantu, sepertinya itu mirip dengan yang Diederik masak. Anda mungkin juga ingin mengganti panggilan
NSLog()
dengan turunan statis dari kelas pembuatan log kustom Anda sendiri, dengan cara itu Anda dapat menambahkan bendera prioritas untuk pesan debug / peringatan / kesalahan, mengirim pesan ke file atau database serta konsol, atau cukup banyak hal lain yang bisa kamu pikirkan.sumber
%s
format specifier yang Apple coba hentikan dan hindari-Wcstring-format-directive
peringatan Dentang yang baru diperkenalkan pada tahun 2015.Menonaktifkan semua NSLogs, bagi seseorang yang alergi terhadap MACROS, berikut adalah sesuatu yang dapat Anda kompilasi juga:
Dan, gunakan hampir seperti NSLog:
Dari blog ini: https://whackylabs.com/logging/ios/2011/01/19/ios-moving-in-and-out-of-nslogs/
sumber
Untuk melengkapi jawaban di atas, akan sangat berguna untuk menggunakan pengganti NSLog dalam situasi tertentu, terutama saat debugging. Misalnya, menyingkirkan semua tanggal dan memproses informasi nama / id pada setiap baris dapat membuat output lebih mudah dibaca dan lebih cepat untuk boot.
Tautan berikut memberikan sedikit amunisi yang berguna untuk membuat pencatatan sederhana menjadi lebih baik.
http://cocoaheads.byu.edu/wiki/a-different-nslog
sumber
Sangat mudah untuk mengubah NSLogs Anda saat ini untuk menampilkan nomor baris dan kelas dari mana mereka dipanggil. Tambahkan satu baris kode ke file awalan Anda:
sumber
Sederhana, misalnya
Output: - [AppDelegate applicationWillEnterForeground:]
sumber
membangun di atas jawaban di atas, inilah yang saya jiplakan dan datang dengan. Juga menambahkan pendataan memori.
sumber
Tambahan baru untuk DLog. Alih-alih menghapus debug sepenuhnya dari aplikasi yang dirilis, hanya menonaktifkannya. Ketika pengguna memiliki masalah, yang akan membutuhkan debugging, cukup beri tahu cara mengaktifkan debug dalam aplikasi yang dirilis dan minta data log melalui email.
Versi singkat: buat variabel global (ya, solusi malas dan sederhana) dan ubah DLog seperti ini:
Jawaban yang lebih panjang di Jomnius iLessons iLearned: Bagaimana Melakukan Pembuktian Debug Dinamis dalam Aplikasi yang Dirilis
sumber
Untuk beberapa waktu saya telah menggunakan situs macro yang diadopsi dari beberapa di atas. Tambang fokus pada penebangan di Konsol, dengan penekanan pada verbositas terkontrol & difilter ; jika Anda tidak keberatan banyak baris log tetapi ingin dengan mudah mengaktifkan & menonaktifkan batch-nya, maka Anda mungkin menemukan ini berguna.
Pertama, saya secara opsional mengganti NSLog dengan printf seperti yang dijelaskan oleh @Rodrigo di atas
Selanjutnya, saya mengaktifkan atau menonaktifkan logging.
Di blok utama, tentukan berbagai kategori yang terkait dengan modul di aplikasi Anda. Tentukan juga level logging di mana panggilan logging tidak akan dipanggil. Kemudian tentukan berbagai rasa dari output NSLog
Dengan demikian, dengan pengaturan saat ini untuk kLOGIFcategory dan kLOGIFdetailLTEQ, panggilan seperti
akan mencetak tetapi ini tidak akan
tidak akan
Jika Anda ingin mengganti pengaturan untuk panggilan log individual, gunakan level negatif:
Saya menemukan beberapa karakter tambahan mengetik setiap baris bernilai seperti yang saya bisa
Saya yakin banyak orang akan menemukan ini sedikit berlebihan, tetapi kalau-kalau ada orang yang menemukan itu sesuai dengan tujuan mereka ..
sumber