2014-07-04 15 views
12

Per qualche motivo LLDB non mi mostra il contenuto delle variabili mentre sto passando il mio codice Swift. L'esecuzione effettiva funziona bene, ma non importa quello che cerco, non riesco a vedere il contenuto delle mie corde!Debugger Xcode 6 beta 2 che non mostra i contenuti delle variabili dopo la chiamata a String.componentsSeparatedByString

Ecco quello che vedo nell'elenco delle variabili:

enter image description here

A questo punto type contiene "nome" e value contiene "Logan". Ma non saresti in grado di dirlo guardando qui. Se utilizzo il pulsante "quick look", il valore è "(Nessuno)".

e ottengo questo tipo di parole senza senso quando si tenta di po una stringa dalla console:

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

Tuttavia, questo varia. A volte vado a prendere qualcosa di simile:

class name = __NSAtom 

o

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

o

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

... ma mai il reale contenuto della stringa!

Aggiornamento:

ho notato il problema sembra solo per iniziare che si verificano una volta una chiamata a componentsSeparatedByString() viene effettuata nella funzione. (Questo accade proprio in alto così come stavo facendo un passo non mi sono accorto che il debugger mostra effettivamente il valore fino a questo punto.) Quindi qualcosa di strano sta succedendo con quella funzione. Ho aggiornato il titolo della domanda per riflettere questa nuova informazione.

È interessante notare che una volta che la stringa è stata "danneggiata" da questa chiamata, non è possibile visualizzarla da nessun'altra parte, anche se passata a una funzione diversa. E qualsiasi variabile stringa regolare non è visualizzabile. Sicuramente un bug, ma mi chiedo se c'è una soluzione alternativa. Sta diventando davvero difficile eseguire il debug del mio programma!

+0

LOL non provare 'expr println (destinazione)'! XD – devios1

risposta

2

Quando ho verificato questo, ho usato sia NSLog("\(myThing)") nel codice compilato che voglio per eseguire il debug, o hanno chiesto expression NSLog("\(myThing)") mentre nel REPL del debugger

+0

Ora sto ottenendo 'errore: : 1: 10: errore: uso dell'identificatore non risolto 'tipo' NSLog (" \ (type) ")'. Sospiro. Dovrebbe essere in grado di vedere 'type'. È un parametro per la funzione. – devios1

+0

Ah adesso funziona! – devios1

+0

Super scomodo però. Spero che lo risolvano presto. – devios1

1

(si noti che non si vuole fare NSLog ("(someVariable)") poiché la stringa espansa potrebbe contenere% sequenze di formato - utilizzare NSLog ("% @", "(alcuneVariabile)") o NSLog ("% @", alcuneVariabile))

1

I ' Mi piacerebbe aggiungere un aggiornamento: questo problema si verifica ancora nelle ultime versioni di Xcode, sia in versione 6.2 che in versione beta 6.3.

Il problema fa parte di componentsSeparatedByString e se si sostituisce questo con split, tutto funziona correttamente. Ne ho avuto quattro casi e non appena li ho cambiati, la mia app ha smesso di funzionare con una versione Zombie di NSString e tutti i miei nomi di variabili hanno iniziato a funzionare. Ho cambiato cose come questa ...

let bits = value!.componentsSeparatedByString(" ") 

con ...

Non credo che lo split sia quasi leggibile, ma almeno funziona!

Problemi correlati