2014-04-22 30 views
7

aşağıdaki Objective-C kodu var:LLVM döngü optimizasyonu hatası mı? Benim uygulamada

-(void)layoutPages 
{ 
    NSMutableArray* sections = [NSMutableArray array]; 
    [sections addObject:[[NSAttributedString alloc] initWithString:@"Hello world"]]; 

    for (NSAttributedString* contentSection in sections) { 
     NSLog(@"%@",contentSection); 
    } 
} 

enter image description here

Konsol çıkışı: 2014-04-22 14:11:01.505 MyApp[24784:830b] Hello world{}

Ben -OS optimizasyonu kullanarak x86_64 mimarisi için derleme, LLVM sonra sessizce dışarı optimize 'contentSection' döngü değişkeni. -O0 kullandığımda, hata kaybolur.

(lldb) po contentSection 
error: Couldn't materialize struct: the variable 'contentSection' has no location, it may have been optimized out 
Errored out in Execute, couldn't PrepareToExecuteJITExpression 

nasıl mümkün olabilir: Ben contentSection değişkenin açıklaması yazdırmaya çalıştığınızda Bu çıkış mı? Benim bakış açımdan, bir döngü değişkeni, döngü içinde kullanıldığında hiçbir zaman optimize edilmemelidir. Diğer insanların LLVM ile benzer bir sorunu olduğunu, ancak bir döngü değişkeniyle olmadığını gördüm. Bu bir derleyici hatası olabilir mi?

+0

bir Ivar yerine aynı sonuç ile bu çalıştı @PeterLapisu –

+0

Teşekkür bir özellik self.contentSections kullanmayı deneyin yaptı. – Sbhklr

+0

'iVar' veya' @ property' ifadesini nasıl beyan ettiniz? Neler olabileceği, daha fazla vigyoların bellek yönetiminin '-Os' ve' _contentSections' ile yer almasıdır. – Rich

cevap

3

Bu muhtemelen bir derleyici ayarları konudur. Öncelikle çalışma planınızın serbest bırakma modunda olmadığını kontrol etmek istersiniz. "Şemayı düzenle ..." -> "Çalıştır" -> "Bilgi" -> "Yapılandırma Oluştur" a gidin. Değerin "Hata Ayıklama" olarak ayarlandığından emin olun. Bu sorun değilse

, sonra hata ayıklama oluşturma ayarları derleyici optimizasyon açık olmayan emin olun. Hata ayıklama için "Optimizasyon Seviyesi" nin "none" değerine ayarlandığından emin olun. Ayrıca "Diğer C Bayrakları" ayarında olduğu gibi derleyici optimizasyon düzeylerinin ayarlanabileceği başka bir yer olmadığından emin olun.