2012-03-01 11 views
45

Od czasu aktualizacji do Xcode 4.3 i pozostawienia mojego debuggera na lldb, każde żądanie wydrukowania zmiennej składowej nie powiedzie się z powodu tego komunikatu o błędzie:lldb nie drukuje wartości zmiennych z "error: reference to" id "jest niejednoznaczne"

(lldb) print request 
error: error: reference to 'id' is ambiguous 
note: candidate found by name lookup is 'id' 
note: candidate found by name lookup is 'id' 
error: 1 errors parsing expression 

'ja' jest ok:

(lldb) print self 
(LoginViewController *) $6 = 0x1cd54d50 

i innych form drukowania zmienną składową też nie:

(lldb) print self.request 
error: property 'request' not found on object of type 'LoginViewController *'; did you mean to access ivar 'request'? 
error: 1 errors parsing expression 
(lldb) print self->request 
error: error: reference to 'id' is ambiguous 
note: candidate found by name lookup is 'id' 
note: candidate found by name lookup is 'id' 
error: 1 errors parsing expression 

Wszystko inne wydaje się działać dobrze. Okno zmiennych Xcode może poprawnie pobrać wartość. Próbowałem czystej kompilacji i usuwania ~/Library/Developer/Xcode/DerivedData /. Googling nie ujawnił żadnych innych przypadków tego samego problemu.

znalazłem jeden wątek na forum dev Apple, ale nie rozwiązanie:

https://devforums.apple.com/message/623694

Ja zgłosiłem to do Apple jako Bug ID # 11029004.

+0

lldb wciąż jest w toku. – zaph

+5

@Zaph Zastanawiam się, dlaczego Apple zrobił domyślny debugger w XCode 4.3, jeśli tak jest. – JosephH

+1

Z jakiegoś powodu zdolność wyświetlania ivars w debugerze ma niski priorytet w Apple. Wiele razy ivars, które są tworzone automatycznie przez instrukcje '@ property' lub deklarowane w' @ implementacji ', nie są wyświetlane. Sprawy stają się coraz lepsze, choć powoli. Proszę zgłosić błąd na stronie bugreport.apple.com. – zaph

Odpowiedz

39

znalazłem jednego rozwiązania:

Użyj opcji "Edytuj schemat" w menu "Produkt", wybierz opcję "Uruchom" na lewym pasku, kartę "Informacje" i zmień opcję Debugger na gdb (nie dotyczy to kodu xcode 5, który nie ma już gdb).

Najwyraźniej Apple pomyślał, że naprawili ten błąd w Xcode 4.3.1, ale tak się dzieje. Przesłałem kilka dodatkowych żądanych informacji debugowania, więc mam nadzieję, że zostaną naprawione dla następnej wersji xcode. Wciąż nie działa w 4.3.2. Zobacz https://devforums.apple.com/message/623694, aby uzyskać aktualizację od firmy Apple.

UPDATE

Próbowałem różne przypadki miałem problemy z, a wszystkie one wydają się działać dobrze z lldb w Xcode 4.4.1 - stąd Gorąco polecam modernizacji Jeśli masz to problem.

+0

Excellent - thanks! Drobna korekcja: "Edytuj schemat" znajduje się w menu "Produkt". Reszta tego samego i to uratowało mój dzień! – mpemburn

+0

@mpemburn dzięki, poprawiłem to :) – JosephH

+3

Aktualizacja: Xcode 5 całkowicie usunął gdb i utknąłeś z lldb w całej okazałości. –

2

Użyj opcji Edit scheme w menu "Produkt", wybierz opcję "Uruchom" na lewym pasku, kartę "Informacje" i zmień opcję Debugger na gdb.

Product>Edit Scheme>Run (Programy)>Build Configuration ma trzy opcje (Niektórzy mogą widzieć tylko dwa 1, 2) 1. Debug 2. Dopuszczenie 3. AdHoc

prostu przejść kontrolę, jeśli jest ustawiony na Debug, jeśli nie, włącz Debuguj.

To była pomyłka robiłem

1

(Xcode5) Nie jest to bezpośrednia odpowiedź na oryginalne pytanie, ale myślę, że może to być istotne i nie chciałbym myśleć godzin ktoś odpady inny jak ja śledzenie go. Problem polegał na tym, że żadne wartości zmiennych nie były wyświetlane w oknie debugowania.

Sprawdziłem inwokację, która faktycznie została podana kompilatorowi, i odkryłem, że była ona optymalizowana za pomocą -Os, mimo że każdy projekt i cel w obszarze roboczym jest jawnie ustawiony na -O0, a ustawienia wymienione w innych odpowiedziach tutaj wszystkie są ustawione na Debugowanie.Po wielu poszukiwaniach okazało się, że istnieje opcja w sekcji "Informacje" każdego projektu o nazwie "Użyj xxx dla kompilacji wiersza polecenia", gdzie xxx to Debug/Release lub jakakolwiek konfiguracja jest dostępna. Zgodnie z opisem podpowiedzi, opcja ta powinna wpływać tylko na kompilacje wykonane za pomocą wiersza poleceń za pomocą narzędzia xcodebuild (co jest nieco dziwne, ponieważ to narzędzie doskonale potrafi wybrać, który schemat będzie używany jako opcja wiersza polecenia). W każdym razie, zmiana tej opcji na Debug w końcu dostała IDE, aby powiedzieć kompilatorowi, którego chciałem -O0 i -g. Nie przypominam sobie, że kiedykolwiek dzieje się to z Xcode4, z tym samym obszarem roboczym.

Powinienem również dodać, że przed zmianą tego ustawienia warto wykonać czyszczenie. Zmieniłem go bez czyszczenia i nagle niektóre z moich plików nagłówkowych nie zostały znalezione (wydawało się, że wstępnie skompilowane nagłówki nie zostały wygenerowane poprawnie). Po kolejnej godzinie gry w ciemności stwierdziłem, że jeśli najpierw ustawię wyżej wspomnianą opcję z powrotem na wersję Release i zrobię czystą, to mogę ustawić ją na Debugowanie i pomyślnie ją zbudować.

Czy ktoś wie, czy zespół programistów Xcode sam z niego korzysta? Mam wrażenie, że tak nie jest.

3

Spróbuj z następującego wyrażenia,

p self.view.bounds.size.width 

lub użytkowania,

po self.view 

p - Wydruk jest tylko wykorzystuje do drukowania normalnych/prostych wartości natomiast, PO - Print Obiekt działa tak samo jak NSLog wydrukować wartość obiektu

0

Przejdź do Product ->Scheme ->New Scheme... i creat e nowy schemat dla twojego celu. Oczyść swój produkt pod numerem Product ->Clean, a Twoja aplikacja powinna działać poprawnie.

To rozwiązało mój problem.