2011-11-09 8 views
14

Bunlar örneğin bir değişkenin değeri çıkışa etkin kullanmak yerine "otomatik değerlendirme oynanmaya devam" öyle birlikte kesme noktaları üzerinde günlük mesajı eylemleri kullanmak iyi bir fikir belirtmiştik 4. XCode yeni özellikler hakkında bugün WWDC videoyu izliyorum NSLoglar her zaman.xcode'ta bir kesme noktasının günlük mesajı eylemi nasıl oluşturulur?

lets say ben Var something like that:

NSLog(@"URL is : %@", userDocumentsURL); 

How would ben write Bir log message action etmek display userDocumentsURL's value? NSLog yerine yukarıdaki yöntemi kullanmak gerçekten iyi bir fikir mi?

cevap

25

Bir Breakpoint 'Günlük Mesajı' eylemi oluşturun.

URL is @(char*) [[userDocumentsURL description] UTF8String]@ 

Alternatif benzer bir kesme noktası 'Debugger komut' eylemi oluşturabilir: log mesajı için böyle bir şey şunlardır

po [NSString stringWithFormat:@"URL is: %@", userDocumentsURL] 

o temizlemek için tartışmasız kolay gibi ben günlüğü için kesme noktası eylemleri kullanmayı tercih NSLogs kaldırmak için bir parça kesme noktaları dışarı. Bu noktada kesme noktaları kullanmanın olası bir dezavantajı, doğrudan bir NSLog'dan çok daha yavaş (hata ayıklama sırasında) olmalarıdır.

+4

hatırlamak daha kolay nil ile canlı neden: ayıklayıcı gerektirecek kadar aptal olduğunu char * cast, ve b: o zaman yarısı çalışmaz ve c: elma belgeleri char * ve d gerekliliğini açık hale getirmez: değişkenler hata ayıklamanıza yardımcı olmuyorsa neden şikayet etmez. Bu özelliğe sahip olmayan Java için Eclipse kesme noktaları ile karşılaştırın, bu yüzden çok daha fakir olmalı, ancak bir koşulda bir baskı koyarak hacklemenize izin verin. Bu, tutuklamanın can sıkıcı bir özelliği olsa da, baskının özel bir döküm gerektirmediği ve yine de durup hatalar hakkında size söyleyeceğinden hala çok daha kolay oluyor. – Rhubarb

-3

yüzden geliştiricilerin bir takıma ölçeklendirmez, kullanışlı ve belki modern kaynak denetimi taahhüt etmez iken düzenlemek kırılma noktaları, özelliği dikkat edin. Bu nedenle, NSLog gibi kod tabanlı günlüğe kaydetme ile kaynak kontrol altında bir ekip üzerinde çalışırken bunu söyleyebilirim.

+4

Hata noktası düzenleyicide doğru paylaşım seçeneklerini seçerseniz, bunu yapacağına inanıyorum. Bu özelliği kendim kullanmıyorum (yalnız geliştirici), ancak WWDC görüşmeleri, paylaşımın kaynak kontrolüyle bütünleştiğini gösteriyor. – mbm29414

+12

Benim görüşüme göre diğer takım üyelerinin tüm hata ayıklama sonuçlarını okumak zorunda kalmamak bir yanlısıdır. İşlem yapmadan önce NSLog'u (veya NSLog'dan önce //) temizlemeniz gerekmez. 10 işten 1'inin "günlüğe kaydetme", "daha fazla NSLog ekledi", "NSLog'un daha az/daha fazla verimsiz olmasını" veya günlüğe kaydetme ile ilgili başka bir şey üzerinde çalıştım. –

+0

Beğen @MatthiasBauch, bunun da yararlı olabileceğini belirtti.Ve diğer yandan, bilmelisiniz ki, uygulamayı yeniden başlatmak istemediğiniz ancak hata ayıklayıcısında bir günlük görmek istediğiniz bazı yararlar vardır, bu yüzden bunu yapmanın tek yolu bu olacaktır. –

19

NSLog'u kullanarak, diğer çözümlerden daha az karakter içeren benzer bir çözüm.

debugger command using NSlog

Ancak sürece böyle void ekleyin:

po (void)NSLog(@"the person name is: %@", p.name) 

Eğer günlüğüne ile basılmış "nil" sinir bozucu bir alacak. örneğin:

(lldb) po NSLog(@"foo") 
nil 
2013-06-19 14:42:59.025 TheMove[95864:c07] foo 

(lldb) po (void)NSLog(@"foo") 
2013-06-19 14:43:10.758 TheMove[95864:c07] foo 

sen (elimden) yazmanın daha hızlı ve ben bilseydim sadece po

İlgili konular