2015-04-23 10 views
5

NSRange è solo una struttura C. Voglio creare uno temporaneo in lldb in Xcode in un punto di interruzione.Come creare e usare temp NSRange in lldb?

particolare per l'uso nel metodo NSArray objectAtIndex:inRange:

Questo non funziona.

(lldb) expr NSRange $tmpRange = (NSRange){0,4} 
(lldb) expr $tmpRange 
(NSRange) $tmpRange = location=0, length=4 
(lldb) expr -o -- [items indexOfObject:item4 inRange:$tmpRange] 
error: no matching constructor for initialization of 'NSRange' (aka '_NSRange') 
error: 1 errors parsing expression 

Il mio codice ha una var NSRange nome badRange al punto di interruzione, e passando quella in opere. Quindi:

(lldb) expr -o -- [items indexOfObject:item4 inRange:badRange] 
0x7fffffffffffffff 
(lldb) expr badRange 
(NSRange) $1 = location=0, length=3 

Cosa sta succedendo?

Grazie.

+0

Qualcuno stava parlando di quello specifico errore nella mailing list [LLVM] (http://llvm.1065342.n5.nabble.com/initialization-list-with-conversion-operator-dont-work-properly-and- report-error-td61466.html) nel 2013. Purtroppo, la risposta sembra essere "file un bug". – Jeff

+0

Bug inoltrato 20684329 su https://bugreport.apple.com – Jeff

+0

Sembra funzionare perfettamente con Xcode 6.3.1. – Dalzhim

risposta

3

La creazione di un NSRange nel debugger funziona correttamente quando si lavora in un progetto OS X ma non per i progetti iOS. Il motivo per cui non funziona su iOS è che anche se Foundation fornisce il file di intestazione in cui è dichiarata la struttura, non espone alcun simbolo corrispondente. Fondamentalmente, su iOS, NSRange è solo una dichiarazione anticipata e non conosco il vero simbolo per l'implementazione.

1

Avevo bisogno di creare un NSRange di recente durante il tentativo di eseguire il debug di codice e ho trovato questo thread. Attualmente è possibile farlo per i progetti iOS usando Xcode 8.3.2 con la seguente sintassi.

po [@"test words here" stringByReplacingOccurrencesOfString:@"\\s" withString:@"" options:1024 range:(NSRange){0,15}] 

Questo funziona anche:

expr NSRange $tmpRange = (NSRange){0,15} 
po [@"test words here" stringByReplacingOccurrencesOfString:@"\\s" withString:@"" options:1024 range:(NSRange)$tmpRange] 
Non

sicuro quando questo è stato fissato (o se mai lo è stato, come lasciare fuori (NSRange) su Il secondo esempio risultati nello stesso errore), ma funziona ora