2014-07-04 6 views
12

Aus irgendeinem Grund zeigt mir LLDB nicht den Inhalt von Variablen, während ich meinen Swift-Code durchtrete. Die tatsächliche Ausführung funktioniert gut, aber egal was ich versuche, ich kann den Inhalt meiner Saiten nicht sehen!Xcode 6 Beta 2 Debugger zeigt keine Variableninhalte nach Aufruf von String.componentsSeparatedByString

Hier ist, was ich in der Variablenliste:

enter image description here

An diesem Punkt type enthält "name" und value enthält "Logan". Aber Sie würden das hier nicht sehen können. Wenn ich die Schaltfläche "Schnellansicht" verwende, wird der Wert "(Keine)" angezeigt.

Und ich diese Art von Kauderwelsch, wenn ich zu po einen String aus der Konsole versuchen:

(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(  
    ^ 

Allerdings variiert diese. Manchmal werde ich so etwas wie:

class name = __NSAtom 

oder

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) 
    } 
    } 
} 

oder

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

... aber nie den tatsächlichen Inhalt der Zeichenfolge!

Update:

ich das Problem bemerkt haben scheint nur in der Funktion gemacht auftretenden einmal ein Aufruf an componentsSeparatedByString() zu starten. (Dies passiert ganz oben, so dass ich beim Steigen nicht bemerkte, dass der Debugger tatsächlich den Wert bis zu diesem Punkt anzeigt.) Also etwas Seltsames ist mit dieser Funktion los. Ich habe den Fragentitel aktualisiert, um diese neuen Informationen wiederzugeben.

Interessanterweise scheint es, sobald die Zeichenfolge durch diesen Aufruf "beschädigt" wurde, können Sie es nirgendwo anders ansehen, auch wenn es an eine andere Funktion übergeben wurde. Und alle regulären String-Variablen sind ebenfalls nicht sichtbar. Definitiv ein Bug, aber ich frage mich, ob es einen Workaround gibt. Es wird sehr schwer mein Programm zu debuggen!

+0

LOL versuche nicht 'expr println (target)'! XD – devios1

Antwort

2

Wenn ich habe das schon begegnet, habe ich entweder NSLog("\(myThing)") im kompilierten Code verwendete ich debuggen möchten, oder haben angerufen expression NSLog("\(myThing)") während in der REPL des Debuggers

+0

Jetzt bekomme ich 'Fehler: : 1: 10: Fehler: Verwendung von unaufgelösten Bezeichner 'Typ' NSLog (" \ (Typ) ")'. Seufzer. Es sollte in der Lage sein, "type" zu sehen. Es ist ein Parameter für die Funktion. – devios1

+0

Ah, jetzt funktioniert es! – devios1

+0

Super unbequem obwohl. Ich hoffe, sie reparieren das bald. – devios1

1

(beachten Sie, dass Sie nicht wollen, zu tun NSLog ("(someVariable)"), da die erweiterte Zeichenfolge% Formatfolgen enthalten könnte - verwenden Sie NSLog ("% @", "(einigeVariable)") oder NSLog ("% @", einigeVariable) statt)

1

I ' Ich möchte ein Update hinzufügen: Dieses Problem tritt immer noch in den neuesten Versionen von Xcode, 6.2 Release und 6.3 Beta.

Das Problem ist Teil von ComponentsSeparatedByString, und wenn Sie das mit Split ersetzen, funktioniert alles gut. Ich hatte vier Instanzen davon, und sobald ich sie änderte, stoppte meine App mit einer Zombie-Version von NSString, und alle meine Variablennamen fingen an zu arbeiten. Ich änderte Dinge wie diese ...

let bits = value!.componentsSeparatedByString(" ") 

mit ...

Ich glaube nicht, Split ist fast so gut lesbar, aber zumindest funktioniert es!

Verwandte Themen