2015-08-03 17 views
12

Mam dość irytujący problem w debugerze Swift, gdy próbuję wydrukować opis obiektu. Podczas próby drukowania oraz przedmiotu, albo przy użyciu polecenia po lub polecenia fr v, otrzymuję komunikaty jakSwift LLBD Wiadomość "<Nie można określić rozmiaru bajtu.>"

error: <EXPR>:1:1: error: use of unresolved identifier 'self' self ^

lub

self = <Unable to determine byte size.>

Co tu się dzieje? Czy istnieją powody, dla których debugger nie jest w stanie odczytać czegoś takiego jak self?

+0

Mam również ten problem. Nie tylko dla siebie, ale dla wielu zmiennych w ramce.Ustawiłem SWIFT_OPTIMIZATION_LEVEL i GCC_OPTIMIZATION_LEVEL na None, jak zalecają inni, ale to nie przyniosło efektu. –

+0

Tak, mam problem z czymś więcej niż tylko "self". Pełny wydruk 'fr v' często zawiera szczegóły innych zmiennych w pamięci i nie ma problemu z ich wydrukowaniem. Podejrzewam, że istnieje jakiś rodzaj obiektu, którego debugger nie jest w stanie przeanalizować, który jest członkiem wszystkich różnych obiektów, których nie mogę wydrukować, ale nie wiem, jakie właściwości tego rodzaju problematycznego typu obiektu miałby spowodowałoby to. – Ziewvater

Odpowiedz

1
<Unable to determine byte size> 

to (oczywiście nieco tajemniczy) komunikat o błędzie, który LLDB wydrukuje, gdy nie rozumie typu.

Pozwolę sobie trochę bardziej rozwinąć. Po wpisaniu wyrażenia lub wykonaniu zmiennej ramki debugger musi ocenić dowolny dostarczony kod lub wyszukać zmienne, o które prosiłeś.

Aby przedstawić Państwu wyniki tego działania, musi on również zrozumieć typ rzeczy. Na przykład Int jest rzeczą, która ma wartość liczbową, której rozmiar odpowiada rozmiarowi wskaźnika na twoim komputerze, ... (cóż, aby być w 100% dokładnym, Int jest rzeczą, która ma element członkowski, który ma wartość liczbową. .., ale LLDB streści to od ciebie). String to rzecz, która ma trochę tekstu (znowu jest trochę trudniej, ale LLDB to streszcza). Jedną z rzeczy, którą debugger lubi znać, jest "rozmiar bajtu" typu, ponieważ ile bajtów w pamięci zajmuje obiekt tego typu?

Czasami debugger nie może zrozumieć typów, o których mówi. Kiedy tak się dzieje, oczywiście jedną z rzeczy, których nie można określić, jest rozmiar bajta. Stąd też wiadomość.

Jeśli napotkasz sytuacji, gdy debuger nie może wywieść typów w aplikacjach prosimy zgłaszać błędy http://bugreport.apple.com

+0

Jaki rodzaj informacji byłby przydatny w raporcie o tym? O ile mogę powiedzieć, problem ten pojawia się zawsze, gdy obiekt, który próbuję sprawdzić, ma odniesienie do konkretnej klasy w moim projekcie. Nie mogę podzielić się z innymi tą klasą (jest to praca, poufne), ale jakiego rodzaju informacje byłyby pomocne w przekazywaniu? – Ziewvater

1

W moim przypadku, po wielu badaniach i testach, odkryłem, że 3rd party dodatki "Crashlytics" i "TwitterKit" (zainstalowane przez cocoapods w moim przypadku) powodowały ten problem dla mnie. Po usunięciu tych bibliotek i wyczyszczeniu, a następnie zbudowaniu, mogłem ponownie poprawnie użyć LLDB.

Zobacz https://stackoverflow.com/a/26451537/2138077

1

Jak wspomniano Scott D, to może być coś z tkaniny. Jeśli używasz Fabric, szczególnie z TwitterKit przejdź do TwitterCit framework i ręcznie edytuj TwitterKit.h. Wymiana

#import <TwitterCore/TwitterCore.h>

z

@import TwitterCore;

sprawia debugger użytkowej ponownie. Sidenote: Strąki tkanin i Crahlytics są aktualizowane i nie niszczą już debuggera.

EDYTOWANIE: Twitter pods z tkaniny również zostały zaktualizowane i począwszy od wersji 1.12.0 nie łamie debuggera. Yay!

Powiązane problemy