2013-10-01 10 views
42

Zaktualizowałem do wersji Xcode 5.0. A kiedy uruchomię aplikację w trybie debugowania i spróbuję wydrukować wartość NSString w konsoli, otrzymam poniższy błąd. Jakieś pomysły?Wartość ciągu zawsze pokazuje zero w celu C

error: warning: couldn't get cmd pointer (substituting NULL): Couldn't load '_cmd' because its value couldn't be evaluated 
Couldn't materialize struct: the variable 'stringValue' has no location, it may have been optimized out 
Errored out in Execute, couldn't PrepareToExecuteJITExpression 

Oto kod:

NSString *stringValue = [[self.responseArray objectAtIndex:i] valueForKey:@"merchant_name"]; 
+3

Czy możesz pokazać kod, który debugujesz? – bneely

+0

NSString * stringValue = [[self.responseArray obiektAtIndex: i] valueForKey: @ "nazwa_sprzedawcy"]; kiedy próbowałem drukować po stringValue daje mi powyższy błąd – Arun

+0

Co to jest licznik "i"? Czy na pewno masz "nazwa handlowa" w swoim DIC? Spróbuj trochę debugowania. – Kuba

Odpowiedz

38

Upewnij się, że jesteś w trybie debugowania. Idź Edit Schemat>Konstruowanie Konfiguracja> Debug

+0

Problem polega na tym, że drukuje on NsArray i inne wartości. tylko w tym przypadku daje ten błąd. Co więcej dostaję ten błąd po uaktualnieniu do Xcode5. Wygląda na to, że jest to błąd kompilatora. – Arun

+0

@Arun nie jest to błąd kompilatora, to tylko ustawienie kompilatora .. zobacz moją odpowiedź – abbood

77

Powodem jest podana w komunikacie o błędzie: może zostały zoptymalizowane z .. to znaczy, że jesteś kompilacji i uruchamiania kodu w sposób optymalny.

musisz zmienić swój poziom optymalizacji kompilatora z Fastest,Smallest do none:

  • przejść do ustawień kompilacji docelowych
  • wyszukiwania dla poziomu optymalizacji
  • zmienić na brak (tryb co jesteś w IE debugowanie , dystrybucja lub wydanie)

zrobić to samo dla ustawień projektu

+7

Cierpię na ten sam problem. Zmiana poziomu optymalizacji kompilatora nie będzie dla mnie działać. Problem pojawia się tylko podczas próby debugowania kodu, który należy do biblioteki, z której korzysta moja aplikacja (biblioteka jest dołączona do mojego projektu i skompilowana przeze mnie). Zmieniłem ustawienia optymalizacji w projekcie bibliotecznym, celu biblioteki, głównym projekcie aplikacji i głównym celu aplikacji bez powodzenia. –

+0

Dzięki, twoja odpowiedź bardzo mi pomaga. Myślę, że spędzę znacznie więcej czasu, aby dowiedzieć się, co się stanie bez twojej odpowiedzi. :) –

+0

Ah to było takie frustrujące! Dziękuję bardzo! – Setheron

9

Być może próbujesz debugować w "Planie uwolnienia". Przejdź do "Product/Scheme/Edit Scheme" i wybierz "run" w lewym panelu. Następnie zmień konfigurację kompilacji na "debugowanie".

3

Jedna alternatywna odpowiedź: zamiast naprawić "można ją było zoptymalizować" przez usunięcie optymalizacji, można zatrzymać jej optymalizację za pomocą zmiennej.

Więc w swoim pytaniu, jeśli coś zrobić z stringValue:

NSString *stringValue = [[self.responseArray objectAtIndex:i] valueForKey:@"merchant_name"]; 
NSLog(@"%@", stringValue); 

stringValue nie będą zoptymalizowane, bo używasz go.

Jeśli chcesz zobaczyć wszystkie instancje zmiennych zoptymalizowane, w swoim projekcie, Użyj produkt ->Analizować przeanalizować projekt. Wszelkie ostrzeżenia "Dead store" (w których wartość jest przechowywana i nigdy nie są czytane) zostaną zoptymalizowane podczas kompilacji, jeśli włączona jest optymalizacja kompilatora.

Powiązane problemy