2014-04-22 13 views
7

W mojej aplikacji mam następujący kod Objective-C:Błąd optymalizacji pętli LLVM?

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

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

enter image description here

Console wyjście: 2014-04-22 14:11:01.505 MyApp[24784:830b] Hello world{}

Gdybym kompilacji dla architektury x86_64 używając optymalizacji -os, LLVM następnie optymalizuje się cicho zmienna pętli "contentSection". Kiedy używam -O0, błąd znika. Jest to wyjście, gdy próbuję wydrukować opis zmiennej contentSection:

(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 

Jak to możliwe? Z mojego punktu widzenia, zmienna pętli nigdy nie powinna być optymalizowana, gdy jest używana wewnątrz pętli. Widziałem, że inni ludzie mają podobny problem z LLVM, ale nie ze zmienną pętli. Czy może to być błąd kompilatora?

+0

czy próbowałeś użyć właściwości self.contentSections zamiast ivar –

+0

Dzięki @PeterLapisu Próbowałem tego z tym samym wynikiem. – Sbhklr

+0

W jaki sposób zadeklarowałeś 'iVar' lub' @ property'? Ponieważ może się zdarzyć, że więcej zarządzania pamięcią vigiours może się odbywać przy użyciu opcji '-Os' i' _contentSections', następuje dezalokacja. – Rich

Odpowiedz

3

Jest to prawdopodobnie problem z ustawieniami kompilatora. Najpierw będziesz chciał sprawdzić, czy twój schemat uruchamiania nie jest w trybie zwolnienia. Przejdź do "Edytuj schemat ..." -> "Uruchom" -> "Informacje" -> "Zbuduj konfigurację". Upewnij się, że wartość jest ustawiona na "Debugowanie".

Jeśli to nie jest problem, upewnij się, że ustawienia kompilacji debugowania nie mają włączonej optymalizacji kompilatora. Upewnij się, że "Poziom optymalizacji" jest ustawiony na "none" dla debugowania. Upewnij się również, że nie ma innego miejsca, w którym można ustawić poziomy optymalizacji kompilatora, na przykład w ustawieniu "Inne flagi C".

Powiązane problemy