2009-09-03 15 views
8

Xcode/ObjectC, gerçekten kullanışlı bir yığın izi yazdırmıyor. Uygulamam bir yere çöküyor ve lanet şey bana sadece 45353453, 34524323, 6745345353, 457634524234 gibi numaralar veriyor. Hiç işe yaramıyor.Bir uygulamanın geçerli yığın izlemesini yazdırmanın kolay yolu?

NSLog(); Tüm uygulamamın başında, tüm uygulamamda var. Ama belki de gerçek yığın izini bulmanın daha basit bir yolu var, insan tarafından okunabilir mi? Sadece uygulamanın başlatılmasında veya kilitlenmesinde değil, her zaman, her etkinlikte olur mu? Çok fazla hata ayıklamaya yardımcı olur.

+0

ayıklayıcısında yığın izini takip edebilir, bu i – Daniel

+0

düşünüyorum kazasında önceki son yöntem görüşmesine almalı Hayır, hata ayıklayıcı bilgileri gerçekten yararlı değildir. –

+1

Hata ayıklayıcı bilgileri neden yardımcı olmaz? Uygulamanızı hata ayıklayıcıda başlatırsanız ve çökerse, hata ayıklayıcı, aranan her satırı görmek için geri adım atabileceğiniz güzel bir yığın izi sunmalıdır. Uygulamanız bir istisnada duruyorsa, bunun nasıl hata ayıklanacağıyla ilgili alex_c'ın yanıtına bakın. –

cevap

1

Uygulamanın içinden güvenilir şekilde yapmanın bir yolu yok. Uygulamanız çöküyorsa ve semboller vermiyorsa, soyulmuş sürüm değil, hata ayıklama sürümünü çalıştırıyor gibi mi geliyor? Eğer oturup unstripped sürümü varsa

, o numaraları ve atos komutunu kullanarak yığın çerçevesinin gerçek adı arasında ilişkilendirebileceği (Terminalinde man atos bakın veya Xcode belgelerine veya Google içinde atos aramak).

Muhtemelen her yöntem çağrısının yığınını kaydetmek istemezsiniz. Bilgi hacmi hızla ezici bir hal alacaktır. Uygulamanızdaki yöntemlerin çoğunun neden çağrıldığına dair bir gizem olmamalı (UIKit ile uygulamanız arasındaki arayüzün neden böyle çalıştığını anlamak biraz zaman alacak).

4

Sana birşey de yararlı olabilir


@implementation UIApplication (MyCategory) 

+ (void)logStackTrace { 
    @try { 
     [[NSException exceptionWithName:@"Stack Trace" reason:@"Testing" userInfo:nil] raise]; 
    } 
    @catch (NSException *e) { 
     NSLog(@"%@", [e callStackSymbols]); 
    } 
} 

@end 
+8

Bu iOS 4'ten önce kullanışlıdır. IOS 4+ için [NSThread callStackSymbols] kullanın. –

İlgili konular