2014-07-04 14 views
12

Z jakiegoś powodu LLDB nie pokazuje mi zawartości zmiennych podczas przechodzenia przez mój kod Swift. Rzeczywista egzekucja działa dobrze, ale bez względu na to, co próbuję, nie widzę zawartości moich napisów!Xcode 6 beta 2 debugger nie pokazuje zmienną zawartość po wywołaniu String.componentsSeparatedByString

Oto, co widzę na liście zmiennej:

enter image description here

W tym momencie type zawiera "nazwa" i value zawiera "Logan". Ale nie byłbyś w stanie powiedzieć tego patrząc tutaj. Jeśli używam przycisku "szybki wygląd", oznacza to, że wartość to "(Brak)".

I dostać ten rodzaj bełkotu, gdy próbuję po String z konsoli:

(lldb) po space 
error: <REPL>:1:1: error: non-nominal type '$__lldb_context' cannot be extended 
extension $__lldb_context {        
^ 
<REPL>:11:5: error: 'Space.Type' does not have a member named '$__lldb_wrapped_expr_0' 
    $__lldb_injected_self.$__lldb_wrapped_expr_0(  
    ^ 

Jednak to zależy. Czasami dostaję coś takiego:

class name = __NSAtom 

lub

Printing description of [0]: 
(String) [0] = { 
    core = { 
    _baseAddress = Builtin.RawPointer = 0x00000001004016f0 
    _countAndFlags = -4611686018427387894 
    _owner = Some { 
     Some = (instance_type = Builtin.RawPointer = 0x0000000100401820 -> 0x00007fff7b3d5390 (void *)0x00007fff7b3d5340: __NSCFString) 
    } 
    } 
} 

lub

Printing description of declaration: 
(String) declaration = <DW_OP_piece for offset 8: top of stack is not a piece> 

... ale nigdy rzeczywistej zawartości łańcucha!

Aktualizacja:

Zauważyłem ten problem wydaje się tylko raz, aby rozpocząć występujące wykonany jest wywołanie componentsSeparatedByString() w funkcji. (Zdarza się to na samej górze, tak jakbym był krokiem, nie zauważyłem, że debugger faktycznie pokazuje wartość do tego momentu.) Więc coś dziwnego dzieje się z tą funkcją. Zaktualizowałem tytuł pytania, aby odzwierciedlić te nowe informacje.

Co ciekawe, wydaje się, że po tym, jak ciąg został "uszkodzony" przez to połączenie, nie można go wyświetlić nigdzie indziej, nawet po przekazaniu do innej funkcji. i nie można wyświetlić żadnych zwykłych zmiennych łańcuchowych. Zdecydowanie błąd, ale zastanawiam się, czy istnieje obejście. Naprawdę trudno jest debugować mój program!

+0

LOL nie próbuj 'expr println (target)'! XD – devios1

Odpowiedz

2

Kiedy byłem napotkania tego użyłem ani NSLog("\(myThing)") w skompilowanego kodu chcę debugowania, lub zostały nazywając expression NSLog("\(myThing)") natomiast w REPL debugger'a

+0

Teraz otrzymuję komunikat 'error: : 1: 10: error: użycie nierozwiązanego identyfikatora 'type' NSLog (" \ (type) ")'. Westchnienie. Powinien być w stanie zobaczyć "typ". Jest to parametr funkcji. – devios1

+0

Ah teraz działa! – devios1

+0

Niezwykle niewygodne. Mam nadzieję, że wkrótce to naprawią. – devios1

1

(zauważ, że nie chcesz robić NSLog ("(someVariable)") jako rozszerzony ciąg znaków może zawierać% formatów sekwencji - użyj NSLog ("% @", "(someVariable)") lub NSLog ("% @", someVariable) zamiast)

1

I ' Dodaje aktualizację: ten problem nadal występuje w najnowszych wersjach Xcode, zarówno wersji 6.2, jak i wersji 6.3 beta.

Problem jest częścią componentsSeparatedByString, a jeśli zastąpisz to podziałem, wszystko działa poprawnie. Miałem cztery przypadki tego, i jak tylko je zmieniłem, moja aplikacja przestała działać z wydaniem NSString z Zombie, a wszystkie moje nazwy zmiennych zaczęły działać. Zmieniłem takie rzeczy ...

let bits = value!.componentsSeparatedByString(" ") 

z ...

let bits = split(value!, { $0 == " "}, maxSplit: Int.max, allowEmptySlices: false) 

Nie sądzę, że podział jest prawie tak czytelny, ale przynajmniej działa!

Powiązane problemy